2
0
Эх сурвалжийг харах

Merge pull request #43730 from qarmin/core_drivers_default_values

Initialize class/struct variables with default values in core/ and drivers/
Rémi Verschelde 4 жил өмнө
parent
commit
32b31a5fa4

+ 2 - 2
core/core_bind.cpp

@@ -542,9 +542,9 @@ void _OS::dump_memory_to_file(const String &p_file) {
 struct _OSCoreBindImg {
 	String path;
 	Size2 size;
-	int fmt;
+	int fmt = 0;
 	ObjectID id;
-	int vram;
+	int vram = 0;
 	bool operator<(const _OSCoreBindImg &p_img) const { return vram == p_img.vram ? id < p_img.id : vram > p_img.vram; }
 };
 

+ 2 - 2
core/core_bind.h

@@ -492,8 +492,8 @@ public:
 	virtual ~_Directory();
 
 private:
-	bool _list_skip_navigational;
-	bool _list_skip_hidden;
+	bool _list_skip_navigational = false;
+	bool _list_skip_hidden = false;
 };
 
 class _Marshalls : public Object {

+ 2 - 2
core/core_constants.cpp

@@ -38,10 +38,10 @@
 struct _CoreConstant {
 #ifdef DEBUG_METHODS_ENABLED
 	StringName enum_name;
-	bool ignore_value_in_docs;
+	bool ignore_value_in_docs = false;
 #endif
 	const char *name;
-	int value;
+	int value = 0;
 
 	_CoreConstant() {}
 

+ 0 - 1
core/crypto/aes_context.cpp

@@ -112,5 +112,4 @@ void AESContext::_bind_methods() {
 }
 
 AESContext::AESContext() {
-	mode = MODE_MAX;
 }

+ 1 - 1
core/crypto/aes_context.h

@@ -47,7 +47,7 @@ public:
 	};
 
 private:
-	Mode mode;
+	Mode mode = MODE_MAX;
 	CryptoCore::AESContext ctx;
 	PackedByteArray iv;
 

+ 4 - 4
core/crypto/crypto_core.h

@@ -37,7 +37,7 @@ class CryptoCore {
 public:
 	class MD5Context {
 	private:
-		void *ctx; // To include, or not to include...
+		void *ctx = nullptr; // To include, or not to include...
 
 	public:
 		MD5Context();
@@ -50,7 +50,7 @@ public:
 
 	class SHA1Context {
 	private:
-		void *ctx; // To include, or not to include...
+		void *ctx = nullptr; // To include, or not to include...
 
 	public:
 		SHA1Context();
@@ -63,7 +63,7 @@ public:
 
 	class SHA256Context {
 	private:
-		void *ctx; // To include, or not to include...
+		void *ctx = nullptr; // To include, or not to include...
 
 	public:
 		SHA256Context();
@@ -76,7 +76,7 @@ public:
 
 	class AESContext {
 	private:
-		void *ctx; // To include, or not to include...
+		void *ctx = nullptr; // To include, or not to include...
 
 	public:
 		AESContext();

+ 1 - 1
core/crypto/hashing_context.h

@@ -45,7 +45,7 @@ public:
 
 private:
 	void *ctx = nullptr;
-	HashType type;
+	HashType type = HASH_MD5;
 
 protected:
 	static void _bind_methods();

+ 1 - 1
core/debugger/debugger_marshalls.h

@@ -148,7 +148,7 @@ struct DebuggerMarshalls {
 
 	// Visual Profiler
 	struct VisualProfilerFrame {
-		uint64_t frame_number;
+		uint64_t frame_number = 0;
 		Vector<RS::FrameProfileArea> areas;
 
 		Array serialize();

+ 2 - 2
core/io/file_access_encrypted.h

@@ -47,8 +47,8 @@ private:
 	Vector<uint8_t> key;
 	bool writing = false;
 	FileAccess *file = nullptr;
-	size_t base;
-	size_t length;
+	size_t base = 0;
+	size_t length = 0;
 	Vector<uint8_t> data;
 	mutable int pos = 0;
 	mutable bool eofed = false;

+ 2 - 2
core/io/file_access_memory.h

@@ -35,8 +35,8 @@
 
 class FileAccessMemory : public FileAccess {
 	uint8_t *data = nullptr;
-	int length;
-	mutable int pos;
+	int length = 0;
+	mutable int pos = 0;
 
 	static FileAccess *create();
 

+ 1 - 1
core/io/packed_data_container.h

@@ -84,7 +84,7 @@ class PackedDataContainerRef : public Reference {
 	GDCLASS(PackedDataContainerRef, Reference);
 
 	friend class PackedDataContainer;
-	uint32_t offset;
+	uint32_t offset = 0;
 	Ref<PackedDataContainer> from;
 
 protected:

+ 4 - 4
core/io/pck_packer.h

@@ -39,7 +39,7 @@ class PCKPacker : public Reference {
 	GDCLASS(PCKPacker, Reference);
 
 	FileAccess *file = nullptr;
-	int alignment;
+	int alignment = 0;
 	uint64_t ofs = 0;
 
 	Vector<uint8_t> key;
@@ -50,9 +50,9 @@ class PCKPacker : public Reference {
 	struct File {
 		String path;
 		String src_path;
-		uint64_t ofs;
-		uint64_t size;
-		bool encrypted;
+		uint64_t ofs = 0;
+		uint64_t size = 0;
+		bool encrypted = false;
 		Vector<uint8_t> md5;
 	};
 	Vector<File> files;

+ 8 - 8
core/math/a_star.h

@@ -47,20 +47,20 @@ class AStar : public Reference {
 	struct Point {
 		Point() {}
 
-		int id;
+		int id = 0;
 		Vector3 pos;
-		real_t weight_scale;
-		bool enabled;
+		real_t weight_scale = 0;
+		bool enabled = false;
 
 		OAHashMap<int, Point *> neighbours = 4u;
 		OAHashMap<int, Point *> unlinked_neighbours = 4u;
 
 		// Used for pathfinding.
-		Point *prev_point;
-		real_t g_score;
-		real_t f_score;
-		uint64_t open_pass;
-		uint64_t closed_pass;
+		Point *prev_point = nullptr;
+		real_t g_score = 0;
+		real_t f_score = 0;
+		uint64_t open_pass = 0;
+		uint64_t closed_pass = 0;
 	};
 
 	struct SortPoints {

+ 11 - 11
core/math/expression.h

@@ -133,7 +133,7 @@ private:
 
 		ENode *next = nullptr;
 
-		Type type;
+		Type type = TYPE_INPUT;
 
 		ENode() {}
 		virtual ~ENode() {
@@ -144,7 +144,7 @@ private:
 	};
 
 	struct ExpressionNode {
-		bool is_op;
+		bool is_op = false;
 		union {
 			Variant::Operator op;
 			ENode *node;
@@ -154,23 +154,23 @@ private:
 	ENode *_parse_expression();
 
 	struct InputNode : public ENode {
-		int index;
+		int index = 0;
 		InputNode() {
 			type = TYPE_INPUT;
 		}
 	};
 
 	struct ConstantNode : public ENode {
-		Variant value;
+		Variant value = Variant::NIL;
 		ConstantNode() {
 			type = TYPE_CONSTANT;
 		}
 	};
 
 	struct OperatorNode : public ENode {
-		Variant::Operator op;
+		Variant::Operator op = Variant::Operator::OP_ADD;
 
-		ENode *nodes[2];
+		ENode *nodes[2] = { nullptr, nullptr };
 
 		OperatorNode() {
 			type = TYPE_OPERATOR;
@@ -184,8 +184,8 @@ private:
 	};
 
 	struct IndexNode : public ENode {
-		ENode *base;
-		ENode *index;
+		ENode *base = nullptr;
+		ENode *index = nullptr;
 
 		IndexNode() {
 			type = TYPE_INDEX;
@@ -193,7 +193,7 @@ private:
 	};
 
 	struct NamedIndexNode : public ENode {
-		ENode *base;
+		ENode *base = nullptr;
 		StringName name;
 
 		NamedIndexNode() {
@@ -202,7 +202,7 @@ private:
 	};
 
 	struct ConstructorNode : public ENode {
-		Variant::Type data_type;
+		Variant::Type data_type = Variant::Type::NIL;
 		Vector<ENode *> arguments;
 
 		ConstructorNode() {
@@ -211,7 +211,7 @@ private:
 	};
 
 	struct CallNode : public ENode {
-		ENode *base;
+		ENode *base = nullptr;
 		StringName method;
 		Vector<ENode *> arguments;
 

+ 6 - 4
core/math/quick_hull.h

@@ -41,7 +41,7 @@ public:
 	struct Edge {
 		union {
 			uint32_t vertices[2];
-			uint64_t id;
+			uint64_t id = 0;
 		};
 
 		bool operator<(const Edge &p_edge) const {
@@ -60,7 +60,7 @@ public:
 
 	struct Face {
 		Plane plane;
-		uint32_t vertices[3];
+		uint32_t vertices[3] = { 0 };
 		Vector<int> points_over;
 
 		bool operator<(const Face &p_face) const {
@@ -70,11 +70,13 @@ public:
 
 private:
 	struct FaceConnect {
-		List<Face>::Element *left, *right = nullptr;
+		List<Face>::Element *left = nullptr;
+		List<Face>::Element *right = nullptr;
 		FaceConnect() {}
 	};
 	struct RetFaceConnect {
-		List<Geometry3D::MeshData::Face>::Element *left, *right = nullptr;
+		List<Geometry3D::MeshData::Face>::Element *left = nullptr;
+		List<Geometry3D::MeshData::Face>::Element *right = nullptr;
 		RetFaceConnect() {}
 	};
 

+ 0 - 1
core/os/dir_access.h

@@ -57,7 +57,6 @@ protected:
 	String _get_root_string() const;
 
 	String fix_path(String p_path) const;
-	bool next_is_dir;
 
 	template <class T>
 	static DirAccess *_create_builtin() {

+ 2 - 2
core/os/file_access.cpp

@@ -254,8 +254,8 @@ class CharBuffer {
 	Vector<char> vector;
 	char stack_buffer[256];
 
-	char *buffer;
-	int capacity;
+	char *buffer = nullptr;
+	int capacity = 0;
 	int written = 0;
 
 	bool grow() {

+ 1 - 1
core/templates/hash_map.h

@@ -73,7 +73,7 @@ public:
 	private:
 		friend class HashMap;
 
-		uint32_t hash;
+		uint32_t hash = 0;
 		Element *next = nullptr;
 		Element() {}
 		Pair pair;

+ 3 - 3
core/templates/list.h

@@ -137,9 +137,9 @@ public:
 
 private:
 	struct _Data {
-		Element *first;
-		Element *last;
-		int size_cache;
+		Element *first = nullptr;
+		Element *last = nullptr;
+		int size_cache = 0;
 
 		bool erase(const Element *p_I) {
 			ERR_FAIL_COND_V(!p_I, false);

+ 1 - 1
core/templates/safe_refcount.h

@@ -165,7 +165,7 @@ uint64_t atomic_exchange_if_greater(volatile uint64_t *pw, volatile uint64_t val
 #endif
 
 struct SafeRefCount {
-	uint32_t count;
+	uint32_t count = 0;
 
 public:
 	// destroy() is called when weak_count_ drops to zero.

+ 1 - 1
core/templates/set.h

@@ -80,7 +80,7 @@ public:
 private:
 	struct _Data {
 		Element *_root = nullptr;
-		Element *_nil;
+		Element *_nil = nullptr;
 		int size_cache = 0;
 
 		_FORCE_INLINE_ _Data() {

+ 2 - 2
core/templates/thread_work_pool.h

@@ -41,8 +41,8 @@ class ThreadWorkPool {
 	std::atomic<uint32_t> index;
 
 	struct BaseWork {
-		std::atomic<uint32_t> *index;
-		uint32_t max_elements;
+		std::atomic<uint32_t> *index = nullptr;
+		uint32_t max_elements = 0;
 		virtual void work() = 0;
 		virtual ~BaseWork() = default;
 	};

+ 1 - 1
core/variant/array.cpp

@@ -371,7 +371,7 @@ void Array::sort() {
 }
 
 struct _ArrayVariantSortCustom {
-	Object *obj;
+	Object *obj = nullptr;
 	StringName func;
 
 	_FORCE_INLINE_ bool operator()(const Variant &p_l, const Variant &p_r) const {

+ 3 - 3
core/variant/callable.h

@@ -62,9 +62,9 @@ public:
 			CALL_ERROR_TOO_FEW_ARGUMENTS, // expected is number of arguments
 			CALL_ERROR_INSTANCE_IS_NULL,
 		};
-		Error error;
-		int argument;
-		int expected;
+		Error error = Error::CALL_OK;
+		int argument = 0;
+		int expected = 0;
 	};
 
 	void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, CallError &r_call_error) const;

+ 1 - 1
core/variant/variant.h

@@ -128,7 +128,7 @@ private:
 
 	struct ObjData {
 		ObjectID id;
-		Object *obj;
+		Object *obj = nullptr;
 	};
 
 	/* array helpers */

+ 5 - 5
drivers/alsa/audio_driver_alsa.h

@@ -56,17 +56,17 @@ class AudioDriverALSA : public AudioDriver {
 
 	static void thread_func(void *p_udata);
 
-	unsigned int mix_rate;
+	unsigned int mix_rate = 0;
 	SpeakerMode speaker_mode;
 
 	snd_pcm_uframes_t buffer_frames;
 	snd_pcm_uframes_t buffer_size;
 	snd_pcm_uframes_t period_size;
-	int channels;
+	int channels = 0;
 
-	bool active;
-	bool thread_exited;
-	mutable bool exit_thread;
+	bool active = false;
+	bool thread_exited = false;
+	mutable bool exit_thread = false;
 
 public:
 	const char *get_name() const {

+ 10 - 10
drivers/dummy/rasterizer_dummy.h

@@ -183,21 +183,21 @@ class RasterizerStorageDummy : public RasterizerStorage {
 public:
 	/* TEXTURE API */
 	struct DummyTexture {
-		int width;
-		int height;
-		uint32_t flags;
-		Image::Format format;
+		int width = 0;
+		int height = 0;
+		uint32_t flags = 0;
+		Image::Format format = Image::Format::FORMAT_MAX;
 		Ref<Image> image;
 		String path;
 	};
 
 	struct DummySurface {
-		uint32_t format;
-		RS::PrimitiveType primitive;
+		uint32_t format = 0;
+		RS::PrimitiveType primitive = RS::PrimitiveType::PRIMITIVE_MAX;
 		Vector<uint8_t> array;
-		int vertex_count;
+		int vertex_count = 0;
 		Vector<uint8_t> index_array;
-		int index_count;
+		int index_count = 0;
 		AABB aabb;
 		Vector<Vector<uint8_t>> blend_shapes;
 		Vector<AABB> bone_aabbs;
@@ -205,8 +205,8 @@ public:
 
 	struct DummyMesh {
 		Vector<DummySurface> surfaces;
-		int blend_shape_count;
-		RS::BlendShapeMode blend_shape_mode;
+		int blend_shape_count = 0;
+		RS::BlendShapeMode blend_shape_mode = RS::BlendShapeMode::BLEND_SHAPE_MODE_NORMALIZED;
 	};
 
 	mutable RID_PtrOwner<DummyTexture> texture_owner;

+ 1 - 1
drivers/unix/ip_unix.cpp

@@ -91,7 +91,7 @@ static IP_Address _sockaddr2ip(struct sockaddr *p_addr) {
 
 IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) {
 	struct addrinfo hints;
-	struct addrinfo *result;
+	struct addrinfo *result = nullptr;
 
 	memset(&hints, 0, sizeof(struct addrinfo));
 	if (p_type == TYPE_IPV4) {

+ 0 - 1
drivers/vulkan/rendering_device_vulkan.cpp

@@ -7645,7 +7645,6 @@ RenderingDevice *RenderingDeviceVulkan::create_local_device() {
 }
 
 RenderingDeviceVulkan::RenderingDeviceVulkan() {
-	screen_prepared = false;
 }
 
 RenderingDeviceVulkan::~RenderingDeviceVulkan() {

+ 111 - 115
drivers/vulkan/rendering_device_vulkan.h

@@ -99,7 +99,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 		ID_BASE_SHIFT = 58 //5 bits for ID types
 	};
 
-	VkDevice device;
+	VkDevice device = VK_NULL_HANDLE;
 
 	Map<RID, Set<RID>> dependency_map; //IDs to IDs that depend on it
 	Map<RID, Set<RID>> reverse_dependency_map; //same as above, but in reverse
@@ -124,35 +124,35 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	// for a framebuffer to render into it.
 
 	struct Texture {
-		VkImage image;
-		VmaAllocation allocation;
+		VkImage image = VK_NULL_HANDLE;
+		VmaAllocation allocation = nullptr;
 		VmaAllocationInfo allocation_info;
-		VkImageView view;
+		VkImageView view = VK_NULL_HANDLE;
 
 		TextureType type;
 		DataFormat format;
 		TextureSamples samples;
-		uint32_t width;
-		uint32_t height;
-		uint32_t depth;
-		uint32_t layers;
-		uint32_t mipmaps;
-		uint32_t usage_flags;
-		uint32_t base_mipmap;
-		uint32_t base_layer;
+		uint32_t width = 0;
+		uint32_t height = 0;
+		uint32_t depth = 0;
+		uint32_t layers = 0;
+		uint32_t mipmaps = 0;
+		uint32_t usage_flags = 0;
+		uint32_t base_mipmap = 0;
+		uint32_t base_layer = 0;
 
 		Vector<DataFormat> allowed_shared_formats;
 
 		VkImageLayout layout;
 
-		uint32_t read_aspect_mask;
-		uint32_t barrier_aspect_mask;
-		bool bound; //bound to framebffer
+		uint32_t read_aspect_mask = 0;
+		uint32_t barrier_aspect_mask = 0;
+		bool bound = false; //bound to framebffer
 		RID owner;
 	};
 
 	RID_Owner<Texture, true> texture_owner;
-	uint32_t texture_upload_region_size_px;
+	uint32_t texture_upload_region_size_px = 0;
 
 	Vector<uint8_t> _texture_get_data_from_image(Texture *tex, VkImage p_image, VmaAllocation p_allocation, uint32_t p_layer, bool p_2d = false);
 
@@ -188,32 +188,28 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	// See the comments in the code to understand better how it works.
 
 	struct StagingBufferBlock {
-		VkBuffer buffer;
-		VmaAllocation allocation;
-		uint64_t frame_used;
-		uint32_t fill_amount;
+		VkBuffer buffer = VK_NULL_HANDLE;
+		VmaAllocation allocation = nullptr;
+		uint64_t frame_used = 0;
+		uint32_t fill_amount = 0;
 	};
 
 	Vector<StagingBufferBlock> staging_buffer_blocks;
-	int staging_buffer_current;
-	uint32_t staging_buffer_block_size;
-	uint64_t staging_buffer_max_size;
-	bool staging_buffer_used;
+	int staging_buffer_current = 0;
+	uint32_t staging_buffer_block_size = 0;
+	uint64_t staging_buffer_max_size = 0;
+	bool staging_buffer_used = false;
 
 	Error _staging_buffer_allocate(uint32_t p_amount, uint32_t p_required_align, uint32_t &r_alloc_offset, uint32_t &r_alloc_size, bool p_can_segment = true, bool p_on_draw_command_buffer = false);
 	Error _insert_staging_block();
 
 	struct Buffer {
-		uint32_t size;
-		uint32_t usage;
-		VkBuffer buffer;
-		VmaAllocation allocation;
+		uint32_t size = 0;
+		uint32_t usage = 0;
+		VkBuffer buffer = VK_NULL_HANDLE;
+		VmaAllocation allocation = nullptr;
 		VkDescriptorBufferInfo buffer_info; //used for binding
 		Buffer() {
-			size = 0;
-			usage = 0;
-			buffer = VK_NULL_HANDLE;
-			allocation = nullptr;
 		}
 	};
 
@@ -276,15 +272,15 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	Map<FramebufferFormatKey, FramebufferFormatID> framebuffer_format_cache;
 	struct FramebufferFormat {
 		const Map<FramebufferFormatKey, FramebufferFormatID>::Element *E;
-		VkRenderPass render_pass; //here for constructing shaders, never used, see section (7.2. Render Pass Compatibility from Vulkan spec)
-		int color_attachments; //used for pipeline validation
+		VkRenderPass render_pass = VK_NULL_HANDLE; //here for constructing shaders, never used, see section (7.2. Render Pass Compatibility from Vulkan spec)
+		int color_attachments = 0; //used for pipeline validation
 		TextureSamples samples;
 	};
 
 	Map<FramebufferFormatID, FramebufferFormat> framebuffer_formats;
 
 	struct Framebuffer {
-		FramebufferFormatID format_id;
+		FramebufferFormatID format_id = 0;
 		struct VersionKey {
 			InitialAction initial_color_action;
 			FinalAction final_color_action;
@@ -307,12 +303,12 @@ class RenderingDeviceVulkan : public RenderingDevice {
 			}
 		};
 
-		uint32_t storage_mask;
+		uint32_t storage_mask = 0;
 		Vector<RID> texture_ids;
 
 		struct Version {
-			VkFramebuffer framebuffer;
-			VkRenderPass render_pass; //this one is owned
+			VkFramebuffer framebuffer = VK_NULL_HANDLE;
+			VkRenderPass render_pass = VK_NULL_HANDLE; //this one is owned
 		};
 
 		Map<VersionKey, Version> framebuffers;
@@ -399,8 +395,8 @@ class RenderingDeviceVulkan : public RenderingDevice {
 
 	struct VertexDescriptionCache {
 		Vector<VertexAttribute> vertex_formats;
-		VkVertexInputBindingDescription *bindings;
-		VkVertexInputAttributeDescription *attributes;
+		VkVertexInputBindingDescription *bindings = nullptr;
+		VkVertexInputAttributeDescription *attributes = nullptr;
 		VkPipelineVertexInputStateCreateInfo create_info;
 	};
 
@@ -408,9 +404,9 @@ class RenderingDeviceVulkan : public RenderingDevice {
 
 	struct VertexArray {
 		RID buffer;
-		VertexFormatID description;
-		int vertex_count;
-		uint32_t max_instances_allowed;
+		VertexFormatID description = 0;
+		int vertex_count = 0;
+		uint32_t max_instances_allowed = 0;
 
 		Vector<VkBuffer> buffers; //not owned, just referenced
 		Vector<VkDeviceSize> offsets;
@@ -419,21 +415,21 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	RID_Owner<VertexArray, true> vertex_array_owner;
 
 	struct IndexBuffer : public Buffer {
-		uint32_t max_index; //used for validation
-		uint32_t index_count;
-		VkIndexType index_type;
-		bool supports_restart_indices;
+		uint32_t max_index = 0; //used for validation
+		uint32_t index_count = 0;
+		VkIndexType index_type = VK_INDEX_TYPE_NONE_NV;
+		bool supports_restart_indices = false;
 	};
 
 	RID_Owner<IndexBuffer, true> index_buffer_owner;
 
 	struct IndexArray {
-		uint32_t max_index; //remember the maximum index here too, for validation
+		uint32_t max_index = 0; //remember the maximum index here too, for validation
 		VkBuffer buffer; //not owned, inherited from index buffer
-		uint32_t offset;
-		uint32_t indices;
-		VkIndexType index_type;
-		bool supports_restart_indices;
+		uint32_t offset = 0;
+		uint32_t indices = 0;
+		VkIndexType index_type = VK_INDEX_TYPE_NONE_NV;
+		bool supports_restart_indices = false;
 	};
 
 	RID_Owner<IndexArray, true> index_array_owner;
@@ -459,10 +455,10 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	};
 
 	struct UniformInfo {
-		UniformType type;
-		int binding;
-		uint32_t stages;
-		int length; //size of arrays (in total elements), or ubos (in bytes * total elements)
+		UniformType type = UniformType::UNIFORM_TYPE_MAX;
+		int binding = 0;
+		uint32_t stages = 0;
+		int length = 0; //size of arrays (in total elements), or ubos (in bytes * total elements)
 
 		bool operator!=(const UniformInfo &p_info) const {
 			return (binding != p_info.binding || type != p_info.type || stages != p_info.stages || length != p_info.length);
@@ -528,25 +524,25 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	struct Shader {
 		struct Set {
 			Vector<UniformInfo> uniform_info;
-			VkDescriptorSetLayout descriptor_set_layout;
+			VkDescriptorSetLayout descriptor_set_layout = VK_NULL_HANDLE;
 		};
 
-		uint32_t vertex_input_mask; //inputs used, this is mostly for validation
-		int fragment_outputs;
+		uint32_t vertex_input_mask = 0; //inputs used, this is mostly for validation
+		int fragment_outputs = 0;
 
 		struct PushConstant {
-			uint32_t push_constant_size;
-			uint32_t push_constants_vk_stage;
+			uint32_t push_constant_size = 0;
+			uint32_t push_constants_vk_stage = 0;
 		};
 
 		PushConstant push_constant;
 
 		bool is_compute = false;
-		int max_output;
+		int max_output = 0;
 		Vector<Set> sets;
 		Vector<uint32_t> set_formats;
 		Vector<VkPipelineShaderStageCreateInfo> pipeline_stages;
-		VkPipelineLayout pipeline_layout;
+		VkPipelineLayout pipeline_layout = VK_NULL_HANDLE;
 	};
 
 	String _shader_uniform_debug(RID p_shader, int p_set = -1);
@@ -610,7 +606,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	};
 
 	Map<DescriptorPoolKey, Set<DescriptorPool *>> descriptor_pools;
-	uint32_t max_descriptors_per_pool;
+	uint32_t max_descriptors_per_pool = 0;
 
 	DescriptorPool *_descriptor_pool_allocate(const DescriptorPoolKey &p_key);
 	void _descriptor_pool_free(const DescriptorPoolKey &p_key, DescriptorPool *p_pool);
@@ -621,7 +617,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	//texture buffer needs a view
 	struct TextureBuffer {
 		Buffer buffer;
-		VkBufferView view;
+		VkBufferView view = VK_NULL_HANDLE;
 	};
 
 	RID_Owner<TextureBuffer, true> texture_buffer_owner;
@@ -635,12 +631,12 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	// the above restriction is not too serious.
 
 	struct UniformSet {
-		uint32_t format;
+		uint32_t format = 0;
 		RID shader_id;
-		uint32_t shader_set;
-		DescriptorPool *pool;
+		uint32_t shader_set = 0;
+		DescriptorPool *pool = nullptr;
 		DescriptorPoolKey pool_key;
-		VkDescriptorSet descriptor_set;
+		VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
 		//VkPipelineLayout pipeline_layout; //not owned, inherited from shader
 		Vector<RID> attachable_textures; //used for validation
 		Vector<Texture *> mutable_sampled_textures; //used for layout change
@@ -668,21 +664,21 @@ class RenderingDeviceVulkan : public RenderingDevice {
 		//Cached values for validation
 #ifdef DEBUG_ENABLED
 		struct Validation {
-			FramebufferFormatID framebuffer_format;
-			uint32_t dynamic_state;
-			VertexFormatID vertex_format;
-			bool uses_restart_indices;
-			uint32_t primitive_minimum;
-			uint32_t primitive_divisor;
+			FramebufferFormatID framebuffer_format = 0;
+			uint32_t dynamic_state = 0;
+			VertexFormatID vertex_format = 0;
+			bool uses_restart_indices = false;
+			uint32_t primitive_minimum = 0;
+			uint32_t primitive_divisor = 0;
 		} validation;
 #endif
 		//Actual pipeline
 		RID shader;
 		Vector<uint32_t> set_formats;
-		VkPipelineLayout pipeline_layout; // not owned, needed for push constants
-		VkPipeline pipeline;
-		uint32_t push_constant_size;
-		uint32_t push_constant_stages;
+		VkPipelineLayout pipeline_layout = VK_NULL_HANDLE; // not owned, needed for push constants
+		VkPipeline pipeline = VK_NULL_HANDLE;
+		uint32_t push_constant_size = 0;
+		uint32_t push_constant_stages = 0;
 	};
 
 	RID_Owner<RenderPipeline, true> render_pipeline_owner;
@@ -690,10 +686,10 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	struct ComputePipeline {
 		RID shader;
 		Vector<uint32_t> set_formats;
-		VkPipelineLayout pipeline_layout; // not owned, needed for push constants
-		VkPipeline pipeline;
-		uint32_t push_constant_size;
-		uint32_t push_constant_stages;
+		VkPipelineLayout pipeline_layout = VK_NULL_HANDLE; // not owned, needed for push constants
+		VkPipeline pipeline = VK_NULL_HANDLE;
+		uint32_t push_constant_size = 0;
+		uint32_t push_constant_stages = 0;
 	};
 
 	RID_Owner<ComputePipeline, true> compute_pipeline_owner;
@@ -714,14 +710,14 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	// each needs it's own command pool.
 
 	struct SplitDrawListAllocator {
-		VkCommandPool command_pool;
+		VkCommandPool command_pool = VK_NULL_HANDLE;
 		Vector<VkCommandBuffer> command_buffers; //one for each frame
 	};
 
 	Vector<SplitDrawListAllocator> split_draw_list_allocators;
 
 	struct DrawList {
-		VkCommandBuffer command_buffer; // If persistent, this is owned, otherwise it's shared with the ringbuffer.
+		VkCommandBuffer command_buffer = VK_NULL_HANDLE; // If persistent, this is owned, otherwise it's shared with the ringbuffer.
 		Rect2i viewport;
 
 		struct SetState {
@@ -755,7 +751,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 			bool index_buffer_uses_restart_indices = false;
 			uint32_t index_array_size = 0;
 			uint32_t index_array_max_index = 0;
-			uint32_t index_array_offset;
+			uint32_t index_array_offset = 0;
 			Vector<uint32_t> set_formats;
 			Vector<bool> set_bound;
 			Vector<RID> set_rids;
@@ -766,8 +762,8 @@ class RenderingDeviceVulkan : public RenderingDevice {
 			RID pipeline_shader;
 			uint32_t invalid_set_from = 0;
 			bool pipeline_uses_restart_indices = false;
-			uint32_t pipeline_primitive_divisor;
-			uint32_t pipeline_primitive_minimum;
+			uint32_t pipeline_primitive_divisor = 0;
+			uint32_t pipeline_primitive_minimum = 0;
 			Vector<uint32_t> pipeline_set_formats;
 			uint32_t pipeline_push_constant_size = 0;
 			bool pipeline_push_constant_supplied = false;
@@ -781,13 +777,13 @@ class RenderingDeviceVulkan : public RenderingDevice {
 #endif
 	};
 
-	DrawList *draw_list; // One for regular draw lists, multiple for split.
-	uint32_t draw_list_count;
-	bool draw_list_split;
+	DrawList *draw_list = nullptr; // One for regular draw lists, multiple for split.
+	uint32_t draw_list_count = 0;
+	bool draw_list_split = false;
 	Vector<RID> draw_list_bound_textures;
 	Vector<RID> draw_list_storage_textures;
-	bool draw_list_unbind_color_textures;
-	bool draw_list_unbind_depth_textures;
+	bool draw_list_unbind_color_textures = false;
+	bool draw_list_unbind_depth_textures = false;
 
 	void _draw_list_insert_clear_region(DrawList *draw_list, Framebuffer *framebuffer, Point2i viewport_offset, Point2i viewport_size, bool p_clear_color, const Vector<Color> &p_clear_colors, bool p_clear_depth, float p_depth, uint32_t p_stencil);
 	Error _draw_list_setup_framebuffer(Framebuffer *p_framebuffer, InitialAction p_initial_color_action, FinalAction p_final_color_action, InitialAction p_initial_depth_action, FinalAction p_final_depth_action, VkFramebuffer *r_framebuffer, VkRenderPass *r_render_pass);
@@ -800,7 +796,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 	/**********************/
 
 	struct ComputeList {
-		VkCommandBuffer command_buffer; // If persistent, this is owned, otherwise it's shared with the ringbuffer.
+		VkCommandBuffer command_buffer = VK_NULL_HANDLE; // If persistent, this is owned, otherwise it's shared with the ringbuffer.
 
 		struct SetState {
 			uint32_t pipeline_expected_format = 0;
@@ -837,7 +833,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
 #endif
 	};
 
-	ComputeList *compute_list;
+	ComputeList *compute_list = nullptr;
 
 	/**************************/
 	/**** FRAME MANAGEMENT ****/
@@ -869,46 +865,46 @@ class RenderingDeviceVulkan : public RenderingDevice {
 		List<RenderPipeline> render_pipelines_to_dispose_of;
 		List<ComputePipeline> compute_pipelines_to_dispose_of;
 
-		VkCommandPool command_pool;
-		VkCommandBuffer setup_command_buffer; //used at the beginning of every frame for set-up
-		VkCommandBuffer draw_command_buffer; //used at the beginning of every frame for set-up
+		VkCommandPool command_pool = VK_NULL_HANDLE;
+		VkCommandBuffer setup_command_buffer = VK_NULL_HANDLE; //used at the beginning of every frame for set-up
+		VkCommandBuffer draw_command_buffer = VK_NULL_HANDLE; //used at the beginning of every frame for set-up
 
 		struct Timestamp {
 			String description;
-			uint64_t value;
+			uint64_t value = 0;
 		};
 
 		VkQueryPool timestamp_pool;
 
-		String *timestamp_names;
-		uint64_t *timestamp_cpu_values;
-		uint32_t timestamp_count;
-		String *timestamp_result_names;
-		uint64_t *timestamp_cpu_result_values;
-		uint64_t *timestamp_result_values;
-		uint32_t timestamp_result_count;
-		uint64_t index;
+		String *timestamp_names = nullptr;
+		uint64_t *timestamp_cpu_values = nullptr;
+		uint32_t timestamp_count = 0;
+		String *timestamp_result_names = nullptr;
+		uint64_t *timestamp_cpu_result_values = nullptr;
+		uint64_t *timestamp_result_values = nullptr;
+		uint32_t timestamp_result_count = 0;
+		uint64_t index = 0;
 	};
 
-	uint32_t max_timestamp_query_elements;
+	uint32_t max_timestamp_query_elements = 0;
 
-	Frame *frames; //frames available, for main device they are cycled (usually 3), for local devices only 1
-	int frame; //current frame
-	int frame_count; //total amount of frames
-	uint64_t frames_drawn;
+	Frame *frames = nullptr; //frames available, for main device they are cycled (usually 3), for local devices only 1
+	int frame = 0; //current frame
+	int frame_count = 0; //total amount of frames
+	uint64_t frames_drawn = 0;
 	RID local_device;
 	bool local_device_processing = false;
 
 	void _free_pending_resources(int p_frame);
 
-	VmaAllocator allocator;
+	VmaAllocator allocator = nullptr;
 
-	VulkanContext *context;
+	VulkanContext *context = nullptr;
 
 	void _free_internal(RID p_id);
 	void _flush(bool p_current_frame);
 
-	bool screen_prepared;
+	bool screen_prepared = false;
 
 	template <class T>
 	void _free_rids(T &p_owner, const char *p_type);

+ 16 - 16
drivers/vulkan/vulkan_context.h

@@ -47,13 +47,13 @@ class VulkanContext {
 		FRAME_LAG = 2
 	};
 
-	VkInstance inst;
-	VkSurfaceKHR surface;
-	VkPhysicalDevice gpu;
+	VkInstance inst = VK_NULL_HANDLE;
+	VkSurfaceKHR surface = VK_NULL_HANDLE;
+	VkPhysicalDevice gpu = VK_NULL_HANDLE;
 	VkPhysicalDeviceProperties gpu_props;
-	uint32_t queue_family_count;
+	uint32_t queue_family_count = 0;
 	VkQueueFamilyProperties *queue_props = nullptr;
-	VkDevice device;
+	VkDevice device = VK_NULL_HANDLE;
 	bool device_initialized = false;
 	bool inst_initialized = false;
 
@@ -61,17 +61,17 @@ class VulkanContext {
 
 	// Present queue.
 	bool queues_initialized = false;
-	uint32_t graphics_queue_family_index;
-	uint32_t present_queue_family_index;
-	bool separate_present_queue;
-	VkQueue graphics_queue;
-	VkQueue present_queue;
+	uint32_t graphics_queue_family_index = 0;
+	uint32_t present_queue_family_index = 0;
+	bool separate_present_queue = false;
+	VkQueue graphics_queue = VK_NULL_HANDLE;
+	VkQueue present_queue = VK_NULL_HANDLE;
 	VkColorSpaceKHR color_space;
 	VkFormat format;
 	VkSemaphore image_acquired_semaphores[FRAME_LAG];
 	VkSemaphore draw_complete_semaphores[FRAME_LAG];
 	VkSemaphore image_ownership_semaphores[FRAME_LAG];
-	int frame_index;
+	int frame_index = 0;
 	VkFence fences[FRAME_LAG];
 	VkPhysicalDeviceMemoryProperties memory_properties;
 	VkPhysicalDeviceFeatures physical_device_features;
@@ -91,14 +91,14 @@ class VulkanContext {
 		uint32_t current_buffer = 0;
 		int width = 0;
 		int height = 0;
-		VkCommandPool present_cmd_pool; // For separate present queue.
+		VkCommandPool present_cmd_pool = VK_NULL_HANDLE; // For separate present queue.
 		VkRenderPass render_pass = VK_NULL_HANDLE;
 	};
 
 	struct LocalDevice {
 		bool waiting = false;
-		VkDevice device;
-		VkQueue queue;
+		VkDevice device = VK_NULL_HANDLE;
+		VkQueue queue = VK_NULL_HANDLE;
 	};
 
 	RID_Owner<LocalDevice, true> local_device_owner;
@@ -108,7 +108,7 @@ class VulkanContext {
 
 	// Commands.
 
-	bool prepared;
+	bool prepared = false;
 
 	Vector<VkCommandBuffer> command_buffer_queue;
 	int command_buffer_count = 1;
@@ -142,7 +142,7 @@ class VulkanContext {
 	PFN_vkGetRefreshCycleDurationGOOGLE fpGetRefreshCycleDurationGOOGLE;
 	PFN_vkGetPastPresentationTimingGOOGLE fpGetPastPresentationTimingGOOGLE;
 
-	VkDebugUtilsMessengerEXT dbg_messenger;
+	VkDebugUtilsMessengerEXT dbg_messenger = VK_NULL_HANDLE;
 
 	Error _create_validation_layers();
 	Error _initialize_extensions();

+ 0 - 2
drivers/windows/dir_access_windows.cpp

@@ -367,8 +367,6 @@ DirAccessWindows::DirAccessWindows() {
 	p->h = INVALID_HANDLE_VALUE;
 	current_dir = ".";
 
-	drive_count = 0;
-
 #ifdef UWP_ENABLED
 	Windows::Storage::StorageFolder ^ install_folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
 	change_dir(install_folder->Path->Data());

+ 5 - 5
drivers/windows/dir_access_windows.h

@@ -46,16 +46,16 @@ class DirAccessWindows : public DirAccess {
 		MAX_DRIVES = 26
 	};
 
-	DirAccessWindowsPrivate *p;
+	DirAccessWindowsPrivate *p = nullptr;
 	/* Windows stuff */
 
-	char drives[MAX_DRIVES]; // a-z:
-	int drive_count;
+	char drives[MAX_DRIVES] = { 0 }; // a-z:
+	int drive_count = 0;
 
 	String current_dir;
 
-	bool _cisdir;
-	bool _cishidden;
+	bool _cisdir = false;
+	bool _cishidden = false;
 
 public:
 	virtual Error list_dir_begin(); ///< This starts dir listing

+ 11 - 11
drivers/xaudio2/audio_driver_xaudio2.h

@@ -65,28 +65,28 @@ class AudioDriverXAudio2 : public AudioDriver {
 	Thread *thread = nullptr;
 	Mutex mutex;
 
-	int32_t *samples_in;
+	int32_t *samples_in = nullptr;
 	int16_t *samples_out[AUDIO_BUFFERS];
 
 	static void thread_func(void *p_udata);
-	int buffer_size;
+	int buffer_size = 0;
 
-	unsigned int mix_rate;
-	SpeakerMode speaker_mode;
+	unsigned int mix_rate = 0;
+	SpeakerMode speaker_mode = SpeakerMode::SPEAKER_MODE_STEREO;
 
-	int channels;
+	int channels = 0;
 
-	bool active;
-	bool thread_exited;
-	mutable bool exit_thread;
-	bool pcm_open;
+	bool active = false;
+	bool thread_exited = false;
+	mutable bool exit_thread = false;
+	bool pcm_open = false;
 
 	WAVEFORMATEX wave_format = { 0 };
 	Microsoft::WRL::ComPtr<IXAudio2> xaudio;
 	int current_buffer = 0;
-	IXAudio2MasteringVoice *mastering_voice;
+	IXAudio2MasteringVoice *mastering_voice = nullptr;
 	XAUDIO2_BUFFER xaudio_buffer[AUDIO_BUFFERS];
-	IXAudio2SourceVoice *source_voice;
+	IXAudio2SourceVoice *source_voice = nullptr;
 	XAudio2DriverVoiceCallback voice_callback;
 
 public: