From 99fe462452be44efa618e83ad9bbecd722ae6ecd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= <pedrojrulez@gmail.com>
Date: Tue, 19 Jan 2021 13:29:41 +0100
Subject: Modernize Thread

- Based on C++11's `thread` and `thread_local`
- No more need to allocate-deallocate or check for null
- No pointer anymore, just a member variable
- Platform-specific implementations no longer needed (except for the few cases of non-portable functions)
- Simpler for `NO_THREADS`
- Thread ids are now the same across platforms (main is 1; others follow)
---
 modules/opensimplex/noise_texture.cpp | 16 +++++-----------
 modules/opensimplex/noise_texture.h   |  2 +-
 2 files changed, 6 insertions(+), 12 deletions(-)

(limited to 'modules/opensimplex')

diff --git a/modules/opensimplex/noise_texture.cpp b/modules/opensimplex/noise_texture.cpp
index 1d75e46747..30a0ca3464 100644
--- a/modules/opensimplex/noise_texture.cpp
+++ b/modules/opensimplex/noise_texture.cpp
@@ -34,7 +34,6 @@
 
 NoiseTexture::NoiseTexture() {
 	update_queued = false;
-	noise_thread = nullptr;
 	regen_queued = false;
 	first_time = true;
 
@@ -52,10 +51,7 @@ NoiseTexture::~NoiseTexture() {
 	if (texture.is_valid()) {
 		RS::get_singleton()->free(texture);
 	}
-	if (noise_thread) {
-		Thread::wait_to_finish(noise_thread);
-		memdelete(noise_thread);
-	}
+	noise_thread.wait_to_finish();
 }
 
 void NoiseTexture::_bind_methods() {
@@ -109,11 +105,9 @@ void NoiseTexture::_set_texture_data(const Ref<Image> &p_image) {
 
 void NoiseTexture::_thread_done(const Ref<Image> &p_image) {
 	_set_texture_data(p_image);
-	Thread::wait_to_finish(noise_thread);
-	memdelete(noise_thread);
-	noise_thread = nullptr;
+	noise_thread.wait_to_finish();
 	if (regen_queued) {
-		noise_thread = Thread::create(_thread_function, this);
+		noise_thread.start(_thread_function, this);
 		regen_queued = false;
 	}
 }
@@ -165,8 +159,8 @@ void NoiseTexture::_update_texture() {
 	use_thread = false;
 #endif
 	if (use_thread) {
-		if (!noise_thread) {
-			noise_thread = Thread::create(_thread_function, this);
+		if (!noise_thread.is_started()) {
+			noise_thread.start(_thread_function, this);
 			regen_queued = false;
 		} else {
 			regen_queued = true;
diff --git a/modules/opensimplex/noise_texture.h b/modules/opensimplex/noise_texture.h
index 9f6e2cbf43..170275bd2e 100644
--- a/modules/opensimplex/noise_texture.h
+++ b/modules/opensimplex/noise_texture.h
@@ -45,7 +45,7 @@ class NoiseTexture : public Texture2D {
 private:
 	Ref<Image> data;
 
-	Thread *noise_thread;
+	Thread noise_thread;
 
 	bool first_time;
 	bool update_queued;
-- 
cgit v1.2.3