blob: 122f6825cf82692b12f5a33553f38b0869a36600 [file] [log] [blame]
#include "offscreen_render_target.hpp"
#ifndef _WIN32
namespace rive_tests
{
rive::rcp<OffscreenRenderTarget> OffscreenRenderTarget::MakeD3D12(
rive::gpu::RenderContextD3D12Impl*,
uint32_t width,
uint32_t height,
bool riveRenderable)
{
return nullptr;
}
} // namespace rive_tests
#else
#include <rive/renderer/d3d12/render_context_d3d12_impl.hpp>
#include <rive/renderer/rive_render_image.hpp>
namespace rive_tests
{
class OffscreenRenderTargetD3D12 : public OffscreenRenderTarget
{
public:
OffscreenRenderTargetD3D12(
rive::gpu::RenderContextD3D12Impl* renderContextImpl,
uint32_t width,
uint32_t height,
bool riveRenderable) :
m_renderTarget(
rive::make_rcp<rive::gpu::RenderTargetD3D12>(renderContextImpl,
width,
height))
{
auto texture = renderContextImpl->manager()->make2DTexture(
width,
height,
1,
DXGI_FORMAT_R8G8B8A8_UNORM,
riveRenderable ? (D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS |
D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
: D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET,
D3D12_RESOURCE_STATE_COMMON);
m_renderTarget->setTargetTexture(texture);
m_renderImage = rive::make_rcp<rive::RiveRenderImage>(
renderContextImpl->adoptImageTexture(texture));
};
rive::RenderImage* asRenderImage() override { return m_renderImage.get(); }
rive::gpu::RenderTarget* asRenderTarget() override
{
return m_renderTarget.get();
}
private:
rive::rcp<rive::gpu::RenderTargetD3D12> m_renderTarget;
rive::rcp<rive::RenderImage> m_renderImage;
};
rive::rcp<OffscreenRenderTarget> OffscreenRenderTarget::MakeD3D12(
rive::gpu::RenderContextD3D12Impl* impl,
uint32_t width,
uint32_t height,
bool riveRenderable)
{
return rive::make_rcp<OffscreenRenderTargetD3D12>(impl,
width,
height,
riveRenderable);
}
} // namespace rive_tests
#endif