| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  noise_texture.cpp                                                    */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                      https://godotengine.org                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2021-01-01 20:13:46 +01:00
										 |  |  | /* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "noise_texture.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "core/core_string_names.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NoiseTexture::NoiseTexture() { | 
					
						
							|  |  |  | 	update_queued = false; | 
					
						
							|  |  |  | 	regen_queued = false; | 
					
						
							|  |  |  | 	first_time = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	size = Vector2i(512, 512); | 
					
						
							|  |  |  | 	seamless = false; | 
					
						
							|  |  |  | 	as_normalmap = false; | 
					
						
							| 
									
										
										
										
											2019-03-04 07:59:08 -08:00
										 |  |  | 	bump_strength = 8.0; | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	flags = FLAGS_DEFAULT; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 14:30:07 +03:00
										 |  |  | 	noise = Ref<OpenSimplexNoise>(); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	texture = VS::get_singleton()->texture_create(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NoiseTexture::~NoiseTexture() { | 
					
						
							|  |  |  | 	VS::get_singleton()->free(texture); | 
					
						
							| 
									
										
										
										
											2021-01-27 20:10:10 +01:00
										 |  |  | 	noise_thread.wait_to_finish(); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::_bind_methods() { | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_width", "width"), &NoiseTexture::set_width); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_height", "height"), &NoiseTexture::set_height); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_noise", "noise"), &NoiseTexture::set_noise); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_noise"), &NoiseTexture::get_noise); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_seamless", "seamless"), &NoiseTexture::set_seamless); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_seamless"), &NoiseTexture::get_seamless); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("set_as_normalmap", "as_normalmap"), &NoiseTexture::set_as_normalmap); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("is_normalmap"), &NoiseTexture::is_normalmap); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_bump_strength", "bump_strength"), &NoiseTexture::set_bump_strength); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_bump_strength"), &NoiseTexture::get_bump_strength); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("_update_texture"), &NoiseTexture::_update_texture); | 
					
						
							| 
									
										
										
										
											2020-01-07 11:35:34 +01:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("_queue_update"), &NoiseTexture::_queue_update); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("_generate_texture"), &NoiseTexture::_generate_texture); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("_thread_done", "image"), &NoiseTexture::_thread_done); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 16:01:24 +02:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::INT, "width", PROPERTY_HINT_RANGE, "1,2048,1,or_greater"), "set_width", "get_width"); | 
					
						
							|  |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::INT, "height", PROPERTY_HINT_RANGE, "1,2048,1,or_greater"), "set_height", "get_height"); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "seamless"), "set_seamless", "get_seamless"); | 
					
						
							|  |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "as_normalmap"), "set_as_normalmap", "is_normalmap"); | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::REAL, "bump_strength", PROPERTY_HINT_RANGE, "0,32,0.1,or_greater"), "set_bump_strength", "get_bump_strength"); | 
					
						
							| 
									
										
										
										
											2018-09-28 14:30:07 +03:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "noise", PROPERTY_HINT_RESOURCE_TYPE, "OpenSimplexNoise"), "set_noise", "get_noise"); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | void NoiseTexture::_validate_property(PropertyInfo &property) const { | 
					
						
							|  |  |  | 	if (property.name == "bump_strength") { | 
					
						
							|  |  |  | 		if (!as_normalmap) { | 
					
						
							|  |  |  | 			property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | void NoiseTexture::_set_texture_data(const Ref<Image> &p_image) { | 
					
						
							|  |  |  | 	data = p_image; | 
					
						
							|  |  |  | 	if (data.is_valid()) { | 
					
						
							| 
									
										
										
										
											2021-01-06 19:01:21 -08:00
										 |  |  | 		VS::get_singleton()->texture_allocate(texture, size.x, size.y, 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, flags); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 		VS::get_singleton()->texture_set_data(texture, p_image); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	emit_changed(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::_thread_done(const Ref<Image> &p_image) { | 
					
						
							|  |  |  | 	_set_texture_data(p_image); | 
					
						
							| 
									
										
										
										
											2021-01-27 20:10:10 +01:00
										 |  |  | 	noise_thread.wait_to_finish(); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	if (regen_queued) { | 
					
						
							| 
									
										
										
										
											2021-01-27 20:10:10 +01:00
										 |  |  | 		noise_thread.start(_thread_function, this); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 		regen_queued = false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::_thread_function(void *p_ud) { | 
					
						
							|  |  |  | 	NoiseTexture *tex = (NoiseTexture *)p_ud; | 
					
						
							|  |  |  | 	tex->call_deferred("_thread_done", tex->_generate_texture()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::_queue_update() { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (update_queued) { | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	update_queued = true; | 
					
						
							|  |  |  | 	call_deferred("_update_texture"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Ref<Image> NoiseTexture::_generate_texture() { | 
					
						
							| 
									
										
										
										
											2020-04-06 13:22:31 +02:00
										 |  |  | 	// Prevent memdelete due to unref() on other thread.
 | 
					
						
							|  |  |  | 	Ref<OpenSimplexNoise> ref_noise = noise; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (ref_noise.is_null()) { | 
					
						
							|  |  |  | 		return Ref<Image>(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Ref<Image> image; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (seamless) { | 
					
						
							| 
									
										
										
										
											2020-04-06 13:22:31 +02:00
										 |  |  | 		image = ref_noise->get_seamless_image(size.x); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2020-04-06 13:22:31 +02:00
										 |  |  | 		image = ref_noise->get_image(size.x, size.y); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (as_normalmap) { | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 		image->bumpmap_to_normalmap(bump_strength); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return image; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::_update_texture() { | 
					
						
							|  |  |  | 	bool use_thread = true; | 
					
						
							|  |  |  | 	if (first_time) { | 
					
						
							|  |  |  | 		use_thread = false; | 
					
						
							|  |  |  | 		first_time = false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #ifdef NO_THREADS
 | 
					
						
							|  |  |  | 	use_thread = false; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	if (use_thread) { | 
					
						
							| 
									
										
										
										
											2021-03-11 21:58:53 +01:00
										 |  |  | 		if (!noise_thread.is_started()) { | 
					
						
							| 
									
										
										
										
											2021-01-27 20:10:10 +01:00
										 |  |  | 			noise_thread.start(_thread_function, this); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 			regen_queued = false; | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			regen_queued = true; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		Ref<Image> image = _generate_texture(); | 
					
						
							|  |  |  | 		_set_texture_data(image); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-01-07 11:35:34 +01:00
										 |  |  | 	update_queued = false; | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 14:30:07 +03:00
										 |  |  | void NoiseTexture::set_noise(Ref<OpenSimplexNoise> p_noise) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_noise == noise) { | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	if (noise.is_valid()) { | 
					
						
							| 
									
										
										
										
											2020-01-07 11:35:34 +01:00
										 |  |  | 		noise->disconnect(CoreStringNames::get_singleton()->changed, this, "_queue_update"); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	noise = p_noise; | 
					
						
							|  |  |  | 	if (noise.is_valid()) { | 
					
						
							| 
									
										
										
										
											2020-01-07 11:35:34 +01:00
										 |  |  | 		noise->connect(CoreStringNames::get_singleton()->changed, this, "_queue_update"); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-28 14:30:07 +03:00
										 |  |  | Ref<OpenSimplexNoise> NoiseTexture::get_noise() { | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	return noise; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::set_width(int p_width) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_width == size.x) { | 
					
						
							| 
									
										
										
										
											2021-05-04 14:28:27 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	size.x = p_width; | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::set_height(int p_height) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_height == size.y) { | 
					
						
							| 
									
										
										
										
											2021-05-04 14:28:27 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	size.y = p_height; | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::set_seamless(bool p_seamless) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_seamless == seamless) { | 
					
						
							| 
									
										
										
										
											2021-05-04 14:28:27 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	seamless = p_seamless; | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool NoiseTexture::get_seamless() { | 
					
						
							|  |  |  | 	return seamless; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::set_as_normalmap(bool p_as_normalmap) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_as_normalmap == as_normalmap) { | 
					
						
							| 
									
										
										
										
											2021-05-04 14:28:27 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | 	as_normalmap = p_as_normalmap; | 
					
						
							|  |  |  | 	_queue_update(); | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 	_change_notify(); | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool NoiseTexture::is_normalmap() { | 
					
						
							|  |  |  | 	return as_normalmap; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | void NoiseTexture::set_bump_strength(float p_bump_strength) { | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (p_bump_strength == bump_strength) { | 
					
						
							| 
									
										
										
										
											2021-05-04 14:28:27 +02:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 	bump_strength = p_bump_strength; | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	if (as_normalmap) { | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | 		_queue_update(); | 
					
						
							| 
									
										
										
										
											2021-05-05 12:44:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-03-03 10:50:55 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float NoiseTexture::get_bump_strength() { | 
					
						
							|  |  |  | 	return bump_strength; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-25 00:25:06 +02:00
										 |  |  | int NoiseTexture::get_width() const { | 
					
						
							|  |  |  | 	return size.x; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int NoiseTexture::get_height() const { | 
					
						
							|  |  |  | 	return size.y; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void NoiseTexture::set_flags(uint32_t p_flags) { | 
					
						
							|  |  |  | 	flags = p_flags; | 
					
						
							|  |  |  | 	VS::get_singleton()->texture_set_flags(texture, flags); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint32_t NoiseTexture::get_flags() const { | 
					
						
							|  |  |  | 	return flags; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Ref<Image> NoiseTexture::get_data() const { | 
					
						
							|  |  |  | 	return data; | 
					
						
							|  |  |  | } |