rexglue-skate3/include/rex/ui/vulkan/provider.h
2026-05-18 22:41:13 +01:00

54 lines
1.8 KiB
C++

#pragma once
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2025 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*
* @modified Tom Clay, 2026 - Adapted for ReXGlue runtime
*/
#include <memory>
#include <rex/ui/graphics_provider.h>
#include <rex/ui/vulkan/device.h>
#include <rex/ui/vulkan/instance.h>
#include <rex/ui/vulkan/ui_samplers.h>
namespace rex {
namespace ui {
namespace vulkan {
class VulkanProvider : public GraphicsProvider {
public:
static std::unique_ptr<VulkanProvider> Create(bool with_gpu_emulation, bool with_presentation);
VulkanInstance* vulkan_instance() const { return vulkan_instance_.get(); }
VulkanDevice* vulkan_device() const { return vulkan_device_.get(); }
// nullptr if created without presentation support.
const UISamplers* ui_samplers() const { return ui_samplers_.get(); }
std::unique_ptr<Presenter> CreatePresenter(Presenter::HostGpuLossCallback host_gpu_loss_callback =
Presenter::FatalErrorHostGpuLossCallback) override;
std::unique_ptr<ImmediateDrawer> CreateImmediateDrawer() override;
private:
explicit VulkanProvider() = default;
std::unique_ptr<VulkanInstance> vulkan_instance_;
// Depends on the instance.
std::unique_ptr<VulkanDevice> vulkan_device_;
// Depends on the device.
std::unique_ptr<UISamplers> ui_samplers_;
};
} // namespace vulkan
} // namespace ui
} // namespace rex