Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skia C API + Zig Bindings

A C11-friendly C API layer for Skia with idiomatic Zig bindings.

This C API is maintained against Skia upstream:

  • Repository: https://github.com/google/skia
  • Pinned commit: 1c31b24a5773b073f146a5b903ee59857d05e2b9
  • Commit link: https://github.com/google/skia/commit/1c31b24a5773b073f146a5b903ee59857d05e2b9

Layout

  • include/skia/c/ public headers
  • src/ implementation
  • examples/ C examples
  • zig/src/skia.zig idiomatic Zig wrapper
  • zig/examples/ Zig SDL demos

Build

make build

Build expects Skia to already be available on the system (headers and libraries).

This produces:

  • build/libskiac.a

Smoke check

make smoke-examples

C SDL + OpenGL demo

Runnable C demo using SDL2 + Ganesh/OpenGL:

make example-sdl-gl SKIA_LIBS="... your skia link libs ..."
./build/sdl_ganesh_gl

Notes:

  • SKIA_LIBS is intentionally left to the environment because Skia link lines vary by build setup.
  • With a system-wide install this often works as: make example-sdl-gl SKIA_LIBS="-lskia"

Zig demos

Build Zig demos:

zig build example-sdl-gl
zig build example-sdl-vk
zig build example-api-showcase

Run Zig demos:

zig build run-sdl-gl
zig build run-sdl-vk
zig build run-api-showcase

Notes:

  • run-sdl-vk currently uses a raw Vulkan present loop to validate window/swapchain path.
  • C and Zig Vulkan bridge APIs are present, but actual Skia Ganesh Vulkan rendering depends on your installed libskia exporting Vulkan Ganesh symbols.

C API Use

Include either the umbrella header:

#include "skia/c/skia.h"

or per-domain headers from skia/c/.

Zig Bindings

Main Zig module:

  • zig/src/skia.zig

Zig Usage

Add dependency in your build.zig.zon:

.dependencies = .{
    .skia_zig = .{
        .url = "https://github.com/theunnecessarythings/skia-zig/archive/<ref>.tar.gz",
        .hash = "<hash>",
    },
},

Wire it in build.zig:

const skia_zig_dep = b.dependency("skia_zig", .{
    .target = target,
    .optimize = optimize,
});
const skia_mod = skia_zig_dep.module("skia");

exe.root_module.addImport("skia", skia_mod);

Use it in Zig code:

const skia = @import("skia");

pub fn main() void {
    const v = skia.version();
    _ = v;
}

Zig Build

The repo includes build.zig and build.zig.zon so it can be consumed as a Zig package.

zig build check

Dependency key name: skia_zig

License

This C API layer is licensed under the BSD 3-Clause License, matching Skia. See LICENSE.

About

Zig Bindings for Skia

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages