blob: 952fc5b1e1ba22cfc9f03d1e4b0fd73a435c24ac [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/testing/dl_test_surface_gl.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/gpu/ganesh/SkSurfaceGanesh.h"
namespace flutter {
namespace testing {
using PixelFormat = DlSurfaceProvider::PixelFormat;
bool DlOpenGLSurfaceProvider::InitializeSurface(size_t width,
size_t height,
PixelFormat format) {
gl_surface_ = std::make_unique<TestGLSurface>(SkISize::Make(width, height));
gl_surface_->MakeCurrent();
primary_ = MakeOffscreenSurface(width, height, format);
return true;
}
std::shared_ptr<DlSurfaceInstance> DlOpenGLSurfaceProvider::GetPrimarySurface()
const {
if (!gl_surface_->MakeCurrent()) {
return nullptr;
}
return primary_;
}
std::shared_ptr<DlSurfaceInstance>
DlOpenGLSurfaceProvider::MakeOffscreenSurface(size_t width,
size_t height,
PixelFormat format) const {
auto offscreen_surface = SkSurfaces::RenderTarget(
(GrRecordingContext*)gl_surface_->GetGrContext().get(),
skgpu::Budgeted::kNo, MakeInfo(format, width, height), 1,
kTopLeft_GrSurfaceOrigin, nullptr, false);
offscreen_surface->getCanvas()->clear(SK_ColorTRANSPARENT);
return std::make_shared<DlSurfaceInstanceBase>(offscreen_surface);
}
} // namespace testing
} // namespace flutter