1 #pragma once
2 
3 #include "Stream.h"
4 #include "Device.h"
5 
6 namespace Framework
7 {
8 	namespace Vulkan
9 	{
10 		class CShaderModule
11 		{
12 		public:
13 			        CShaderModule() = default;
14 			        CShaderModule(CDevice&, Framework::CStream&);
15 			        CShaderModule(const CShaderModule&) = delete;
16 			        CShaderModule(CShaderModule&&);
17 			virtual ~CShaderModule();
18 
19 			bool IsEmpty() const;
20 			void Reset();
21 
22 			CShaderModule& operator =(const CShaderModule&) = delete;
23 			CShaderModule& operator =(CShaderModule&&);
24 			               operator VkShaderModule() const;
25 
26 		private:
27 			void Create(Framework::CStream&);
28 			void MoveFrom(CShaderModule&&);
29 
30 			const CDevice* m_device = nullptr;
31 			VkShaderModule m_handle = VK_NULL_HANDLE;
32 		};
33 	}
34 }
35