blob: e0295afbeb1efbf1f0722e093c1794da836732a0 [file] [log] [blame] [edit]
/*
* Copyright 2022 Rive
*/
#include "render_context_null.hpp"
#include "rive/renderer/rive_render_image.hpp"
#include "utils/factory_utils.hpp"
using namespace rive;
using namespace rive::gpu;
std::unique_ptr<rive::gpu::RenderContext> RenderContextNULL::MakeContext()
{
return std::make_unique<RenderContext>(
std::make_unique<RenderContextNULL>());
}
RenderContextNULL::RenderContextNULL()
{
m_platformFeatures.supportsRasterOrderingMode = true;
m_platformFeatures.supportsAtomicMode = true;
m_platformFeatures.supportsClockwiseMode = true;
m_platformFeatures.supportsClockwiseFixedFunctionMode = true;
m_platformFeatures.supportsClockwiseAtomicMode = true;
}
class BufferRingNULL : public BufferRing
{
public:
BufferRingNULL(size_t capacityInBytes) : BufferRing(capacityInBytes) {}
private:
void* onMapBuffer(int bufferIdx, size_t bytesWritten)
{
return shadowBuffer();
}
void onUnmapAndSubmitBuffer(int bufferIdx, size_t bytesWritten) {}
};
rive::rcp<rive::gpu::RenderTarget> RenderContextNULL::makeRenderTarget(
uint32_t width,
uint32_t height)
{
class RenderTargetNULL : public rive::gpu::RenderTarget
{
public:
RenderTargetNULL(uint32_t width, uint32_t height) :
RenderTarget(width, height)
{}
};
return rive::make_rcp<RenderTargetNULL>(width, height);
}
rive::rcp<rive::RenderBuffer> RenderContextNULL::makeRenderBuffer(
rive::RenderBufferType type,
rive::RenderBufferFlags flags,
size_t sizeInBytes)
{
return make_rcp<DataRenderBuffer>(type, flags, sizeInBytes);
}
rcp<Texture> RenderContextNULL::makeImageTexture(uint32_t width,
uint32_t height,
uint32_t mipLevelCount,
const uint8_t imageDataRGBA[])
{
return make_rcp<Texture>(width, height);
}
std::unique_ptr<rive::gpu::BufferRing> RenderContextNULL::makeUniformBufferRing(
size_t capacityInBytes)
{
return std::make_unique<BufferRingNULL>(capacityInBytes);
}
std::unique_ptr<rive::gpu::BufferRing> RenderContextNULL::makeStorageBufferRing(
size_t capacityInBytes,
rive::gpu::StorageBufferStructure)
{
return std::make_unique<BufferRingNULL>(capacityInBytes);
}
std::unique_ptr<rive::gpu::BufferRing> RenderContextNULL::makeVertexBufferRing(
size_t capacityInBytes)
{
return std::make_unique<BufferRingNULL>(capacityInBytes);
}