text: #pragma once
  
  // 
  #include "./core.hpp"
  #include "./device.hpp"
  #include "./memory.hpp"
  
  // 
  namespace rmc {
  
      class ShaderStageObject : public BaseObject { public:
  
      public: 
          // 
          ShaderStageObject(Handle const& base, Handle const& handle, const std::shared_ptr<vkh::CreateHelperBase> const& info = {}) : BaseObject(base, handle, info) {};
          ShaderStageObject(Handle const& base, const std::shared_ptr<vkh::CreateHelperBase> const& info = {}) : BaseObject(base, info) {};
  
          // 
          ShaderStageObject(Handle const& base, Handle const& handle, const std::shared_ptr<vkh::ShaderStageCreateHelper> const& info = {}) : BaseObject(base, handle, std::dynamic_pointer_cast<vkh::CreateHelperBase>(info)) {};
          ShaderStageObject(Handle const& base, const std::shared_ptr<vkh::ShaderStageCreateHelper> const& info = {}) : BaseObject(base, std::dynamic_pointer_cast<vkh::CreateHelperBase>(info)) {};
  
          // 
          virtual Handle& constructor() override;
      };
  
      class ShaderModuleObject : public BaseObject { public:
  
      public: 
          // 
          ShaderModuleObject(Handle const& base, Handle const& handle, const std::shared_ptr<vkh::CreateHelperBase> const& info = {}) : BaseObject(base, handle, info) {};
          ShaderModuleObject(Handle const& base, const std::shared_ptr<vkh::CreateHelperBase> const& info = {}) : BaseObject(base, info) {};
  
          // 
          ShaderModuleObject(Handle const& base, Handle const& handle, const std::shared_ptr<vkh::ShaderModuleCreateHelper> const& info = {}) : BaseObject(base, handle, std::dynamic_pointer_cast<vkh::CreateHelperBase>(info)) {};
          ShaderModuleObject(Handle const& base, const std::shared_ptr<vkh::ShaderModuleCreateHelper> const& info = {}) : BaseObject(base, std::dynamic_pointer_cast<vkh::CreateHelperBase>(info)) {};
  
          // 
          virtual Handle& constructor() override;
      };
  
  };
  