diff options
Diffstat (limited to 'modules/noise/noise_texture.h')
-rw-r--r-- | modules/noise/noise_texture.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/modules/noise/noise_texture.h b/modules/noise/noise_texture.h new file mode 100644 index 0000000000..2a94df39d4 --- /dev/null +++ b/modules/noise/noise_texture.h @@ -0,0 +1,109 @@ +/*************************************************************************/ +/* noise_texture.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* 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. */ +/*************************************************************************/ + +#ifndef NOISE_TEXTURE_H +#define NOISE_TEXTURE_H + +#include "noise.h" + +#include "core/object/ref_counted.h" +#include "scene/resources/texture.h" + +class NoiseTexture : public Texture2D { + GDCLASS(NoiseTexture, Texture2D); + +private: + Ref<Image> image; + + Thread noise_thread; + + bool first_time = true; + bool update_queued = false; + bool regen_queued = false; + + mutable RID texture; + uint32_t flags = 0; + + Ref<Noise> noise; + bool invert = false; + Vector2i size = Vector2i(512, 512); + Vector2 noise_offset; + bool seamless = false; + real_t seamless_blend_skirt = 0.1; + bool as_normal_map = false; + float bump_strength = 8.0; + + void _thread_done(const Ref<Image> &p_image); + static void _thread_function(void *p_ud); + + void _queue_update(); + Ref<Image> _generate_texture(); + void _update_texture(); + void _set_texture_image(const Ref<Image> &p_image); + +protected: + static void _bind_methods(); + virtual void _validate_property(PropertyInfo &property) const override; + +public: + void set_noise(Ref<Noise> p_noise); + Ref<Noise> get_noise(); + + void set_width(int p_width); + void set_height(int p_height); + + void set_invert(bool p_invert); + bool get_invert() const; + + void set_seamless(bool p_seamless); + bool get_seamless(); + + void set_seamless_blend_skirt(real_t p_blend_skirt); + real_t get_seamless_blend_skirt(); + + void set_as_normal_map(bool p_as_normal_map); + bool is_normal_map(); + + void set_bump_strength(float p_bump_strength); + float get_bump_strength(); + + int get_width() const override; + int get_height() const override; + + virtual RID get_rid() const override; + virtual bool has_alpha() const override { return false; } + + virtual Ref<Image> get_image() const override; + + NoiseTexture(); + virtual ~NoiseTexture(); +}; + +#endif // NOISE_TEXTURE_H |