66 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <ecs/entity.hpp>
 | 
						|
#include <memory/pointer_types/null_on_move.hpp>
 | 
						|
#include <memory/scope.hpp>
 | 
						|
#include <renderer/backend/vk/context/swapchain.hpp>
 | 
						|
#include <renderer/frontend/context/context.hpp>
 | 
						|
 | 
						|
namespace lt::renderer::vk {
 | 
						|
 | 
						|
using memory::NullOnMove;
 | 
						|
 | 
						|
/** A layer of glue between main graphics objects. */
 | 
						|
class Context: public IContext
 | 
						|
{
 | 
						|
public:
 | 
						|
	Context(const ecs::Entity &surface_entity);
 | 
						|
 | 
						|
	[[nodiscard]] auto instance() const -> IInstance * override
 | 
						|
	{
 | 
						|
		return m_instance;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto gpu() const -> IGpu * override
 | 
						|
	{
 | 
						|
		return m_gpu.get();
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto device() const -> IDevice * override
 | 
						|
	{
 | 
						|
		return m_device.get();
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto swapchain() const -> ISwapchain * override
 | 
						|
	{
 | 
						|
		return m_swapchain.get();
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto surface() const -> ISurface * override
 | 
						|
	{
 | 
						|
		return m_surface.get();
 | 
						|
	}
 | 
						|
 | 
						|
	void recreate_swapchain() override
 | 
						|
	{
 | 
						|
		m_swapchain.reset();
 | 
						|
		m_swapchain = memory::create_scope<vk::Swapchain>(
 | 
						|
		    m_surface.get(),
 | 
						|
		    m_gpu.get(),
 | 
						|
		    m_device.get()
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	IInstance *m_instance;
 | 
						|
 | 
						|
	memory::Scope<ISurface> m_surface;
 | 
						|
 | 
						|
	memory::Scope<IGpu> m_gpu;
 | 
						|
 | 
						|
	memory::Scope<IDevice> m_device;
 | 
						|
 | 
						|
	memory::Scope<ISwapchain> m_swapchain;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace lt::renderer::vk
 |