odin-nanosvg

Odin bindings to nanosvg
Log | Files | Refs | Submodules | README | LICENSE

commit 8c19a63e3cb9bdd8a6545b0ddad936d60fa2759a
parent 8b81bed443ce2c17381a6e1fd6a2c146344f2ca9
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Mon,  7 Jul 2025 12:41:54 -0300

nanosvg: enable rasterizer

By default, include the rasterizer logic.

It can be disabled with -define:ENABLE_RASTERIZER=false for a smaller
binary.

Diffstat:
Mnanosvg.odin | 48++++++++++++++++++++++++++++++++++++++----------
1 file changed, 38 insertions(+), 10 deletions(-)

diff --git a/nanosvg.odin b/nanosvg.odin @@ -2,16 +2,32 @@ package nanosvg import "core:c" -when ODIN_OS == .Windows { - foreign import Nanosvg "bin/windows/nanosvg.lib" -} else when ODIN_OS == .Linux { - foreign import Nanosvg "bin/linux/nanosvg.a" -} else when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 { - foreign import Nanosvg "bin/macos-arm64/nanosvg.a" -} else when ODIN_OS == .Darwin && ODIN_ARCH != .arm64 { - foreign import Nanosvg "bin/macos/nanosvg.a" -} else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { - foreign import Nanosvg "bin/wasm/nanosvg.o" +ENABLE_RASTERIZER :: #config(ENABLE_RASTERIZER, true) + +when ENABLE_RASTERIZER { + when ODIN_OS == .Windows { + foreign import Nanosvg "bin/windows/nanosvgrast.lib" + } else when ODIN_OS == .Linux { + foreign import Nanosvg "bin/linux/nanosvgrast.a" + } else when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 { + foreign import Nanosvg "bin/macos-arm64/nanosvgrast.a" + } else when ODIN_OS == .Darwin && ODIN_ARCH != .arm64 { + foreign import Nanosvg "bin/macos/nanosvgrast.a" + } else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import Nanosvg "bin/wasm/nanosvgrast.o" + } +} else { + when ODIN_OS == .Windows { + foreign import Nanosvg "bin/windows/nanosvg.lib" + } else when ODIN_OS == .Linux { + foreign import Nanosvg "bin/linux/nanosvg.a" + } else when ODIN_OS == .Darwin && ODIN_ARCH == .arm64 { + foreign import Nanosvg "bin/macos-arm64/nanosvg.a" + } else when ODIN_OS == .Darwin && ODIN_ARCH != .arm64 { + foreign import Nanosvg "bin/macos/nanosvg.a" + } else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import Nanosvg "bin/wasm/nanosvg.o" + } } EnumBackingType :: c.int @@ -117,3 +133,15 @@ foreign Nanosvg { Delete :: proc(image: ^Image) --- } +when ENABLE_RASTERIZER { + // Rasterize is opaque because the caller doesn't interact with it's data. + Rasterizer :: struct {} + + @(link_prefix = "nsvg", default_calling_convention = "c") + foreign Nanosvg { + CreateRasterizer :: proc() -> ^Rasterizer --- + DeleteRasterizer :: proc(r: ^Rasterizer) --- + Rasterize :: proc(r: ^Rasterizer, image: ^Image, offset_x, offset_y, scale: c.float, dst: ^c.uchar, w, h, stride: c.int) --- + } +} +