63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "Base/PlatformEnums.hpp"
|
|
#include <functional>
|
|
|
|
namespace openVulkanoCpp
|
|
{
|
|
class IPlatform;
|
|
class IRenderer;
|
|
|
|
/**
|
|
* \brief Helper class the produces all the platform depending classes
|
|
*/
|
|
class PlatformProducer
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* \brief Creates the renderer for the given render api
|
|
* \param renderApi The render api that should be used
|
|
* \return The created Renderer.
|
|
* \throws std::runtime_error if the render api is not supported
|
|
*/
|
|
static IRenderer* CreateRenderManager(RenderAPI renderApi);
|
|
|
|
/**
|
|
* \brief Creates a platform that fits best for the current environment
|
|
* \param renderApi The render api that should be used when searching for the best suited platform provider
|
|
* \return The created platform
|
|
* \throws std::runtime_error if the render api is not supported
|
|
*/
|
|
static IPlatform* CreatePlatform(RenderAPI renderApi);
|
|
|
|
static void RegisterPlatformProducer(RenderAPI renderApi, std::function<IPlatform*()> createMethod);
|
|
|
|
static void RegisterRendererProducer(RenderAPI renderApi, std::function<IRenderer*()> createMethod);
|
|
};
|
|
|
|
template<class PLATFORM_CLASS>
|
|
struct PlatformProducerRegistration
|
|
{
|
|
PlatformProducerRegistration(RenderAPI renderApi)
|
|
{
|
|
PlatformProducer::RegisterPlatformProducer(renderApi, []() -> IPlatform* { new PLATFORM_CLASS(); });
|
|
}
|
|
};
|
|
|
|
template<class RENDERER_CLASS>
|
|
struct RendererProducerRegistration
|
|
{
|
|
RendererProducerRegistration(RenderAPI renderApi)
|
|
{
|
|
PlatformProducer::RegisterRendererProducer(renderApi, []() -> IRenderer* { new RENDERER_CLASS(); });
|
|
}
|
|
};
|
|
}
|