| /* |
| * Copyright 2025 Rive |
| */ |
| |
| #include "testing_window.hpp" |
| |
| #include "common/render_context_null.hpp" |
| #include "rive/renderer/rive_renderer.hpp" |
| |
| namespace rive::gpu |
| { |
| class TestingWindowNULL : public TestingWindow |
| { |
| public: |
| rive::Factory* factory() override { return m_renderContext.get(); } |
| |
| rive::gpu::RenderContext* renderContext() const override |
| { |
| return m_renderContext.get(); |
| } |
| |
| std::unique_ptr<rive::Renderer> beginFrame( |
| const FrameOptions& options) override |
| { |
| rive::gpu::RenderContext::FrameDescriptor frameDescriptor = { |
| .renderTargetWidth = m_width, |
| .renderTargetHeight = m_height, |
| .loadAction = options.doClear |
| ? rive::gpu::LoadAction::clear |
| : rive::gpu::LoadAction::preserveRenderTarget, |
| .clearColor = options.clearColor, |
| .msaaSampleCount = options.forceMSAA ? 4 : 0, |
| .disableRasterOrdering = options.disableRasterOrdering, |
| .wireframe = options.wireframe, |
| .clockwiseFillOverride = options.clockwiseFillOverride, |
| .synthesizedFailureType = options.synthesizedFailureType, |
| }; |
| m_renderContext->beginFrame(frameDescriptor); |
| return std::make_unique<RiveRenderer>(m_renderContext.get()); |
| } |
| |
| void flushPLSContext(RenderTarget* renderTarget) final |
| { |
| rcp<RenderTarget> nullTarget; |
| if (renderTarget == nullptr) |
| { |
| nullTarget = m_renderContext->static_impl_cast<RenderContextNULL>() |
| ->makeRenderTarget(m_width, m_height); |
| renderTarget = nullTarget.get(); |
| } |
| m_renderContext->flush({.renderTarget = renderTarget}); |
| } |
| |
| void endFrame(std::vector<uint8_t>* pixelData) override |
| { |
| flushPLSContext(nullptr); |
| |
| if (pixelData) |
| { |
| // Copy the image data from m_pixelReadBuff to pixelData. |
| pixelData->clear(); |
| pixelData->reserve(m_height * m_width * 4); |
| for (size_t i = 0; i < m_height * m_width; ++i) |
| { |
| constexpr static uint8_t magenta[] = {0xff, 0x00, 0xff, 0xff}; |
| pixelData->insert(pixelData->end(), magenta, magenta + 4); |
| } |
| } |
| } |
| |
| private: |
| std::unique_ptr<RenderContext> m_renderContext = |
| RenderContextNULL::MakeContext(); |
| }; |
| }; // namespace rive::gpu |
| |
| TestingWindow* TestingWindow::MakeNULL() |
| { |
| return new rive::gpu::TestingWindowNULL(); |
| } |