5-04 701 views
skia build
1. 下载安装 depot_tools
git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'
export PATH="${PWD}/depot_tools:${PATH}"
2. clone skia
git clone https://skia.googlesource.com/skia.git
# or
# fetch skia
cd skia
python3 tools/git-sync-deps
3. set env
source "/Users/mustodo/Documents/skia/skia/third_party/externals/emsdk/emsdk_env.sh"
third_party\externals\emsdk\emsdk_env.bat
4. build
darwin
bin/gn gen out/Static --args='
is_official_build=true
is_debug=false
skia_use_system_expat=false
skia_use_system_harfbuzz=false
skia_use_system_icu=false
skia_use_system_libjpeg_turbo=false
skia_use_system_libpng=false
skia_use_system_zlib=false
skia_use_system_libwebp=false'
ninja -C out/Static
linux
bin/gn gen out/Static --args='
is_official_build=true
is_debug=false
skia_use_system_expat=false
skia_use_system_harfbuzz=false
skia_use_system_icu=false
skia_use_system_libjpeg_turbo=false
skia_use_system_libpng=false
skia_use_system_zlib=false
skia_use_system_libwebp=false'
ninja -C out/Static
windows
需要 安装 VisualStudio-2017(140), Windows SDK 10
bin\gn gen out\static --args="is_official_build=true is_debug=false skia_use_system_expat=false skia_use_system_harfbuzz=false skia_use_system_icu=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_zlib=false skia_use_system_libwebp=false win_sdk=\"D:\Windows Kits\10\" win_vc=\"D:\Program_Files\VisualStudio\2017\Community\VC""
darwin
//+build darwin
package main
/*
#cgo LDFLAGS: -L/Users/mustodo/Documents/skia/skia/out/Static
#cgo LDFLAGS: -lstdc++
#cgo LDFLAGS: -lskia
#cgo LDFLAGS: -framework Cocoa
#cgo CFLAGS: -I/Users/mustodo/Documents/skia/skia
#include "include/c/sk_types.h"
#include "include/c/sk_canvas.h"
#include "include/c/sk_data.h"
#include "include/c/sk_image.h"
#include "include/c/sk_imageinfo.h"
#include "include/c/sk_paint.h"
#include "include/c/sk_path.h"
#include "include/c/sk_surface.h"
*/
import "C"
import (
"fmt"
"io/ioutil"
"unsafe"
)
func main() {
fmt.Println("hello")
var info *C.sk_imageinfo_t = C.sk_imageinfo_new(640, 480, C.RGBA_8888_SK_COLORTYPE, C.PREMUL_SK_ALPHATYPE, nil)
var surface *C.sk_surface_t = C.sk_surface_new_raster(info, nil)
C.sk_imageinfo_delete(info)
var canvas *C.sk_canvas_t = C.sk_surface_get_canvas(surface)
var fill *C.sk_paint_t = C.sk_paint_new()
C.sk_paint_set_color(fill, 0xFF0000FF)
C.sk_canvas_draw_paint(canvas, fill)
C.sk_paint_set_color(fill, 0xFF00FFFF)
var rect C.sk_rect_t
rect.left = 100.0
rect.top = 100.0
rect.right = 540.0
rect.bottom = 380.0
C.sk_canvas_draw_rect(canvas, &rect, fill)
var stroke *C.sk_paint_t = C.sk_paint_new()
C.sk_paint_set_color(stroke, 0xFFFF0000)
C.sk_paint_set_antialias(stroke, true)
C.sk_paint_set_stroke(stroke, true)
C.sk_paint_set_stroke_width(stroke, 5.0)
var path_builder *C.sk_pathbuilder_t = C.sk_pathbuilder_new()
C.sk_pathbuilder_move_to(path_builder, 50.0, 50.0)
C.sk_pathbuilder_line_to(path_builder, 590.0, 50.0)
C.sk_pathbuilder_cubic_to(path_builder, -490.0, 50.0, 1130.0, 430.0, 50.0, 430.0)
C.sk_pathbuilder_line_to(path_builder, 590.0, 430.0)
var path *C.sk_path_t = C.sk_pathbuilder_detach_path(path_builder)
C.sk_canvas_draw_path(canvas, path, stroke)
C.sk_paint_set_color(fill, 0x8000FF00)
var rect2 C.sk_rect_t
rect2.left = 120.0
rect2.top = 120.0
rect2.right = 520.0
rect2.bottom = 360.0
C.sk_canvas_draw_oval(canvas, &rect2, fill)
C.sk_pathbuilder_delete(path_builder)
C.sk_path_delete(path)
C.sk_paint_delete(stroke)
C.sk_paint_delete(fill)
var image *C.sk_image_t = C.sk_surface_new_image_snapshot(surface)
var data *C.sk_data_t = C.sk_image_encode(image)
C.sk_image_unref(image)
fmt.Println("C.sk_data_get_size(data)= %d", C.int(C.sk_data_get_size(data)))
skdata := C.sk_data_get_data(data)
godata := C.GoBytes(unsafe.Pointer(skdata), C.int(C.sk_data_get_size(data)))
err := ioutil.WriteFile("out.png", godata, 0666)
if err != nil {
fmt.Printf("文件打开失败=%v\n", err)
}
C.sk_data_unref(data)
C.sk_surface_unref(surface)
}
linux
//+build linux
package main
/*
#cgo LDFLAGS: -L/home/nux/develop/skia/skia/out/Static
#cgo LDFLAGS: -lskia
// #cgo LDFLAGS: -lSDL2 -lGL -lGLU -lX11
#cgo LDFLAGS: -lGL
#cgo LDFLAGS: -lfreetype -lfontconfig
#cgo LDFLAGS: -lm
#cgo LDFLAGS: -lstdc++
#cgo CFLAGS: -I/home/nux/develop/skia/skia
#include "include/c/sk_types.h"
#include "include/c/sk_canvas.h"
#include "include/c/sk_data.h"
#include "include/c/sk_image.h"
#include "include/c/sk_imageinfo.h"
#include "include/c/sk_paint.h"
#include "include/c/sk_path.h"
#include "include/c/sk_surface.h"
*/
import "C"
import (
"fmt"
"io/ioutil"
"unsafe"
)
func main() {
fmt.Println("hello")
var info *C.sk_imageinfo_t = C.sk_imageinfo_new(640, 480, C.RGBA_8888_SK_COLORTYPE, C.PREMUL_SK_ALPHATYPE, nil)
var surface *C.sk_surface_t = C.sk_surface_new_raster(info, nil)
C.sk_imageinfo_delete(info)
var canvas *C.sk_canvas_t = C.sk_surface_get_canvas(surface)
var fill *C.sk_paint_t = C.sk_paint_new()
C.sk_paint_set_color(fill, 0xFF0000FF)
C.sk_canvas_draw_paint(canvas, fill)
C.sk_paint_set_color(fill, 0xFF00FFFF)
var rect C.sk_rect_t
rect.left = 100.0
rect.top = 100.0
rect.right = 540.0
rect.bottom = 380.0
C.sk_canvas_draw_rect(canvas, &rect, fill)
var stroke *C.sk_paint_t = C.sk_paint_new()
C.sk_paint_set_color(stroke, 0xFFFF0000)
C.sk_paint_set_antialias(stroke, true)
C.sk_paint_set_stroke(stroke, true)
C.sk_paint_set_stroke_width(stroke, 5.0)
var path_builder *C.sk_pathbuilder_t = C.sk_pathbuilder_new()
C.sk_pathbuilder_move_to(path_builder, 50.0, 50.0)
C.sk_pathbuilder_line_to(path_builder, 590.0, 50.0)
C.sk_pathbuilder_cubic_to(path_builder, -490.0, 50.0, 1130.0, 430.0, 50.0, 430.0)
C.sk_pathbuilder_line_to(path_builder, 590.0, 430.0)
var path *C.sk_path_t = C.sk_pathbuilder_detach_path(path_builder)
C.sk_canvas_draw_path(canvas, path, stroke)
C.sk_paint_set_color(fill, 0x8000FF00)
var rect2 C.sk_rect_t
rect2.left = 120.0
rect2.top = 120.0
rect2.right = 520.0
rect2.bottom = 360.0
C.sk_canvas_draw_oval(canvas, &rect2, fill)
C.sk_pathbuilder_delete(path_builder)
C.sk_path_delete(path)
C.sk_paint_delete(stroke)
C.sk_paint_delete(fill)
var image *C.sk_image_t = C.sk_surface_new_image_snapshot(surface)
var data *C.sk_data_t = C.sk_image_encode(image)
C.sk_image_unref(image)
fmt.Println("C.sk_data_get_size(data)= %d", C.int(C.sk_data_get_size(data)))
skdata := C.sk_data_get_data(data)
godata := C.GoBytes(unsafe.Pointer(skdata), C.int(C.sk_data_get_size(data)))
err := ioutil.WriteFile("out.png", godata, 0666)
if err != nil {
fmt.Printf("文件打开失败=%v\n", err)
}
C.sk_data_unref(data)
C.sk_surface_unref(surface)
}