blob: 64cfee4acb1964545c09a0dbbdf1ff4922c728e8 [file] [log] [blame]
/*
* Copyright 2022 Rive
*/
#include "rive/pls/pls_render_context_buffer_ring_impl.hpp"
namespace rive::pls
{
void PLSRenderContextBufferRingImpl::resizePathTexture(size_t width, size_t height)
{
m_pathBuffer = makeTexelBufferRing(TexelBufferRing::Format::rgba32ui,
width / kPathTexelsPerItem,
height,
kPathTexelsPerItem,
kPathTextureIdx,
TexelBufferRing::Filter::nearest);
}
void PLSRenderContextBufferRingImpl::resizeContourTexture(size_t width, size_t height)
{
m_contourBuffer = makeTexelBufferRing(TexelBufferRing::Format::rgba32ui,
width / kContourTexelsPerItem,
height,
kContourTexelsPerItem,
pls::kContourTextureIdx,
TexelBufferRing::Filter::nearest);
}
void PLSRenderContextBufferRingImpl::resizeSimpleColorRampsBuffer(size_t sizeInBytes)
{
m_simpleColorRampsBuffer =
makePixelUnpackBufferRing(sizeInBytes / sizeof(TwoTexelRamp), sizeof(TwoTexelRamp));
}
void PLSRenderContextBufferRingImpl::resizeGradSpanBuffer(size_t sizeInBytes)
{
m_gradSpanBuffer =
makeVertexBufferRing(sizeInBytes / sizeof(GradientSpan), sizeof(GradientSpan));
}
void PLSRenderContextBufferRingImpl::resizeTessVertexSpanBuffer(size_t sizeInBytes)
{
m_tessSpanBuffer =
makeVertexBufferRing(sizeInBytes / sizeof(TessVertexSpan), sizeof(TessVertexSpan));
}
void PLSRenderContextBufferRingImpl::resizeTriangleVertexBuffer(size_t sizeInBytes)
{
m_triangleBuffer =
makeVertexBufferRing(sizeInBytes / sizeof(TriangleVertex), sizeof(TriangleVertex));
}
void PLSRenderContextBufferRingImpl::unmapPathTexture(size_t widthWritten, size_t heightWritten)
{
m_pathBuffer->unmapAndSubmitBuffer(heightWritten * widthWritten * 4 * 4);
}
void PLSRenderContextBufferRingImpl::unmapContourTexture(size_t widthWritten, size_t heightWritten)
{
return m_contourBuffer->unmapAndSubmitBuffer(heightWritten * widthWritten * 4 * 4);
}
void PLSRenderContextBufferRingImpl::unmapSimpleColorRampsBuffer(size_t bytesWritten)
{
m_simpleColorRampsBuffer->unmapAndSubmitBuffer(bytesWritten);
}
void PLSRenderContextBufferRingImpl::unmapGradSpanBuffer(size_t bytesWritten)
{
m_gradSpanBuffer->unmapAndSubmitBuffer(bytesWritten);
}
void PLSRenderContextBufferRingImpl::unmapTessVertexSpanBuffer(size_t bytesWritten)
{
m_tessSpanBuffer->unmapAndSubmitBuffer(bytesWritten);
}
void PLSRenderContextBufferRingImpl::unmapTriangleVertexBuffer(size_t bytesWritten)
{
m_triangleBuffer->unmapAndSubmitBuffer(bytesWritten);
}
void PLSRenderContextBufferRingImpl::updateFlushUniforms(const FlushUniforms* uniformData)
{
if (m_uniformBuffer == nullptr)
{
m_uniformBuffer = makeUniformBufferRing(sizeof(FlushUniforms));
}
memcpy(m_uniformBuffer->mapBuffer(), uniformData, sizeof(FlushUniforms));
m_uniformBuffer->unmapAndSubmitBuffer(sizeof(FlushUniforms));
}
} // namespace rive::pls