| /* |
| * Copyright 2022 Rive |
| */ |
| |
| #include "gm.hpp" |
| |
| #include "common/testing_window.hpp" |
| #include "rive/renderer/render_context.hpp" |
| #include "rive/renderer/render_context_impl.hpp" |
| |
| using namespace rivegm; |
| |
| void GM::run(const char* name, std::vector<uint8_t>* pixels) |
| { |
| TestingWindow::FrameOptions frameOptions = { |
| .name = name, |
| .clearColor = clearColor(), |
| .triangulationThresholds = DeterministicTriangulationThresholds, |
| }; |
| updateFrameOptions(&frameOptions); |
| |
| rive::gpu::RenderContext* renderContext = nullptr; |
| auto previousMode = rive::gpu::ShaderCompilationMode::standard; |
| if (frameOptions.shaderCompilationMode != |
| rive::gpu::ShaderCompilationMode::standard) |
| { |
| renderContext = TestingWindow::Get()->renderContext(); |
| if (renderContext != nullptr) |
| { |
| previousMode = |
| renderContext->impl()->testingOnly_setShaderCompilationMode( |
| rive::gpu::ShaderCompilationMode::onlyUbershaders); |
| } |
| } |
| |
| auto renderer = TestingWindow::Get()->beginFrame(frameOptions); |
| draw(renderer.get()); |
| TestingWindow::Get()->endFrame(pixels); |
| |
| if ((frameOptions.shaderCompilationMode != |
| rive::gpu::ShaderCompilationMode::standard) && |
| renderContext != nullptr) |
| { |
| renderContext->impl()->testingOnly_setShaderCompilationMode( |
| previousMode); |
| } |
| } |
| |
| void GM::draw(rive::Renderer* renderer) |
| { |
| renderer->save(); |
| this->onDraw(renderer); |
| renderer->restore(); |
| } |