blob: f1b4bf56d8f9575e85be9723d591a8aeb4c79143 [file] [log] [blame]
#include "offscreen_render_target.hpp"
#ifndef _WIN32
namespace rive_tests
{
rive::rcp<OffscreenRenderTarget> OffscreenRenderTarget::MakeD3D(
rive::gpu::RenderContextD3DImpl*,
uint32_t width,
uint32_t height,
bool riveRenderable)
{
return nullptr;
}
} // namespace rive_tests
#else
#include <rive/renderer/d3d11/render_context_d3d_impl.hpp>
#include <rive/renderer/rive_render_image.hpp>
namespace rive_tests
{
class OffscreenRenderTargetD3D : public OffscreenRenderTarget
{
public:
OffscreenRenderTargetD3D(rive::gpu::RenderContextD3DImpl* renderContextImpl,
uint32_t width,
uint32_t height,
bool riveRenderable) :
m_renderTarget(
rive::make_rcp<rive::gpu::RenderTargetD3D>(renderContextImpl,
width,
height))
{
auto texture = renderContextImpl->makeSimple2DTexture(
DXGI_FORMAT_R8G8B8A8_UNORM,
width,
height,
1,
riveRenderable
? (D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_RENDER_TARGET |
D3D11_BIND_SHADER_RESOURCE)
: D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE);
m_renderTarget->setTargetTexture(texture);
m_renderImage = rive::make_rcp<rive::RiveRenderImage>(
renderContextImpl->adoptImageTexture(texture, width, height));
};
rive::RenderImage* asRenderImage() override { return m_renderImage.get(); }
rive::gpu::RenderTarget* asRenderTarget() override
{
return m_renderTarget.get();
}
private:
rive::rcp<rive::gpu::RenderTargetD3D> m_renderTarget;
rive::rcp<rive::RiveRenderImage> m_renderImage;
};
rive::rcp<OffscreenRenderTarget> OffscreenRenderTarget::MakeD3D(
rive::gpu::RenderContextD3DImpl* impl,
uint32_t width,
uint32_t height,
bool riveRenderable)
{
return rive::make_rcp<OffscreenRenderTargetD3D>(impl,
width,
height,
riveRenderable);
}
} // namespace rive_tests
#endif