@@ -8,17 +8,16 @@ extern "C" {
88
99 sk_canvas* sk_canvas_create (int width, int height) {
1010 sk_canvas* canvas = new sk_canvas ();
11- SkImageInfo info = SkImageInfo::MakeN32Premul (width, height);
12- size_t rowBytes = info.minRowBytes ();
13- size_t size = info.computeByteSize (rowBytes);
14- canvas->pixels = malloc (size);
15- canvas->surface = SkSurface::MakeRasterDirect (info, canvas->pixels , rowBytes).release ();
11+ canvas->backend = kBackendCPU ;
12+ canvas->surface = SkSurface::MakeRasterN32Premul (width, height).release ();
1613 canvas->context_2d = sk_canvas_create_context (canvas);
1714 return canvas;
1815 }
1916
2017 sk_canvas* sk_canvas_create_gl (int width, int height) {
2118 sk_canvas* canvas = new sk_canvas ();
19+ canvas->backend = kBackendOpenGL ;
20+
2221 auto interface = GrGLMakeNativeInterface ();
2322
2423 if (interface == nullptr ) {
@@ -63,9 +62,6 @@ extern "C" {
6362 void sk_canvas_destroy (sk_canvas* canvas) {
6463 canvas->surface ->unref ();
6564 sk_context_destroy ((sk_context*) canvas->context_2d );
66- if (canvas->pixels != nullptr ) {
67- free (canvas->pixels );
68- }
6965 delete canvas;
7066 }
7167
@@ -121,18 +117,13 @@ extern "C" {
121117 }
122118
123119 void sk_canvas_set_size (sk_canvas* canvas, int width, int height) {
124- if (canvas->pixels != nullptr ) {
120+ if (canvas->backend == kBackendCPU ) {
125121 // Raster canvas
126122 canvas->surface ->unref ();
127123 sk_context_destroy ((sk_context*) canvas->context_2d );
128- free (canvas->pixels );
129- SkImageInfo info = SkImageInfo::MakeN32Premul (width, height);
130- size_t rowBytes = info.minRowBytes ();
131- size_t size = info.computeByteSize (rowBytes);
132- canvas->pixels = malloc (size);
133- canvas->surface = SkSurface::MakeRasterDirect (info, canvas->pixels , rowBytes).release ();
124+ canvas->surface = SkSurface::MakeRasterN32Premul (width, height).release ();
134125 canvas->context_2d = sk_canvas_create_context (canvas);
135- } else {
126+ } else if (canvas-> backend == kBackendOpenGL ) {
136127 // OpenGL canvas
137128 canvas->surface ->unref ();
138129 sk_context_destroy ((sk_context*) canvas->context_2d );
0 commit comments