8#include <GLES2/gl2ext.h>
13#include "third_party/skia/include/core/SkSurface.h"
14#include "third_party/skia/include/gpu/ganesh/GrBackendSurface.h"
15#include "third_party/skia/include/gpu/ganesh/GrDirectContext.h"
16#include "third_party/skia/include/gpu/ganesh/SkSurfaceGanesh.h"
17#include "third_party/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h"
18#include "third_party/skia/include/gpu/ganesh/gl/GrGLDirectContext.h"
19#include "third_party/skia/include/gpu/ganesh/gl/GrGLInterface.h"
20#include "third_party/skia/include/gpu/ganesh/gl/GrGLMakeWebGLInterface.h"
21#include "third_party/skia/include/gpu/ganesh/gl/GrGLTypes.h"
30 SkiaRenderContext(
int sample_count,
int stencil)
31 : sample_count_(sample_count),
33 gr_context_(GrDirectContexts::MakeGL(GrGLInterfaces::MakeWebGL())),
34 fb_info_({0, GL_RGBA8_OES}) {
35 gr_context_->resetContext(kRenderTarget_GrGLBackendState |
36 kMisc_GrGLBackendState);
40 const sk_sp<flutter::DisplayList> display_list)
override {
42 canvas->drawColor(SK_ColorTRANSPARENT, SkBlendMode::kSrc);
45 dispatcher.drawDisplayList(display_list, 1.0f);
53 void* out_pixels)
override {
61 RenderImage(
image, format);
62 glReadPixels(0, 0,
image->width(),
image->height(), GL_RGBA,
63 GL_UNSIGNED_BYTE, out_pixels);
73 surface_ = SkSurfaces::WrapBackendRenderTarget(
74 gr_context_.get(),
target, kBottomLeft_GrSurfaceOrigin,
75 kRGBA_8888_SkColorType, SkColorSpace::MakeSRGB(),
nullptr);
80 gr_context_->setResourceCacheLimit(bytes);
86 canvas->drawColor(SK_ColorTRANSPARENT, SkBlendMode::kSrc);
93 auto skia_image =
image ?
image->asSkiaImage() :
nullptr;
94 canvas->drawImage(skia_image ? skia_image->skia_image() : nullptr, 0,
101 sk_sp<GrDirectContext> gr_context_ =
nullptr;
102 sk_sp<SkSurface>
surface_ =
nullptr;
103 GrGLFramebufferInfo fb_info_;
104 GrGLint sample_count_;
114 return std::make_unique<SkiaRenderContext>(sample_count, stencil);
virtual void RenderPicture(const sk_sp< flutter::DisplayList > display_list)=0
static std::unique_ptr< RenderContext > Make(int sample_count, int stencil)
virtual void Resize(int width, int height)=0
virtual void SetResourceCacheLimit(int bytes)=0
virtual bool RasterizeImage(flutter::DlImage *image, ImageByteFormat format, void *out_pixels)=0
Represents an image whose allocation is (usually) resident on device memory.
Backend implementation of |DlOpReceiver| for |SkCanvas|.
FlutterVulkanImage * image
SKWASM_EXPORT bool skwasm_isWimp()