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:
| M | nanosvg.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) ---
+ }
+}
+