diff --git a/freetype/examples/single-glyph.zig b/freetype/examples/single-glyph.zig index cd5340a7..5a581d5b 100644 --- a/freetype/examples/single-glyph.zig +++ b/freetype/examples/single-glyph.zig @@ -21,7 +21,7 @@ pub fn main() !void { while (i < bitmap.rows()) : (i += 1) { var j: usize = 0; while (j < bitmap.width()) : (j += 1) { - const char: u8 = switch (bitmap.buffer()[i * bitmap.width() + j]) { + const char: u8 = switch (bitmap.buffer().?[i * bitmap.width() + j]) { 0 => ' ', 1...128 => ';', else => '#', diff --git a/freetype/src/freetype/image.zig b/freetype/src/freetype/image.zig index 03a271c5..2a692147 100644 --- a/freetype/src/freetype/image.zig +++ b/freetype/src/freetype/image.zig @@ -45,8 +45,13 @@ pub const Bitmap = struct { return @intToEnum(PixelMode, self.handle.pixel_mode); } - pub fn buffer(self: Bitmap) []const u8 { + pub fn buffer(self: Bitmap) ?[]const u8 { const buffer_size = std.math.absCast(self.pitch()) * self.rows(); - return self.handle.buffer[0..buffer_size]; + return if (self.handle.buffer == null) + // freetype returns a null pointer for zero-length allocations + // https://github.com/hexops/freetype/blob/bbd80a52b7b749140ec87d24b6c767c5063be356/freetype/src/base/ftutil.c#L135 + null + else + self.handle.buffer[0..buffer_size]; } };