Skip to content

Commit

Permalink
add Image.buffer property
Browse files Browse the repository at this point in the history
  • Loading branch information
mmoskal committed Jun 20, 2023
1 parent 7143b50 commit 7c520f6
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 97 deletions.
2 changes: 1 addition & 1 deletion bytecode/bytecode.md
Expand Up @@ -22,7 +22,7 @@ For a more highlevel description of runtime and bytecode, see [Runtime implement

img_version_major = 2
img_version_minor = 12
img_version_patch = 0
img_version_patch = 1
img_version = $version
magic0 = 0x53766544 // "DevS"
magic1 = 0xf1296e0a
Expand Down
4 changes: 2 additions & 2 deletions compiler/src/bytecode.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions packages/graphics/src/image.ts
Expand Up @@ -26,6 +26,12 @@ export declare class Image {
*/
bpp: number

/**
* Get the underlying writable buffer.
* Allocates if needed.
*/
buffer: Buffer

/**
* Get a pixel color
*/
Expand Down
4 changes: 2 additions & 2 deletions runtime/devicescript/devs_bytecode.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 19 additions & 6 deletions runtime/devicescript/impl_image.c
Expand Up @@ -72,6 +72,11 @@ value_t prop_Image_bpp(devs_ctx_t *ctx, value_t self) {
return devs_value_from_int(r ? r->bpp : 0);
}

value_t prop_Image_buffer(devs_ctx_t *ctx, value_t self) {
devs_gimage_t *r = devs_to_writable_image(ctx, self);
return devs_value_from_gc_obj(ctx, r ? r->buffer : NULL);
}

static devs_gimage_t *devs_arg_self_image(devs_ctx_t *ctx) {
return devs_to_gimage(ctx, devs_arg_self(ctx));
}
Expand Down Expand Up @@ -275,7 +280,10 @@ static void fill_rect(devs_ctx_t *ctx, devs_gimage_t *img, int x, int y, int w,
uint8_t f = img->bpp == 1 ? (c & 1) * 0xff : 0x11 * (c & 0xf);
int bh = img->stride;

make_writable_image(ctx, img);
img = make_writable_image(ctx, img);

if (img == NULL)
return;

if (!img_has_padding(img) && x == 0 && y == 0 && w == img->width && h == img->height) {
memset(img->pix, f, bh * img->width);
Expand Down Expand Up @@ -801,7 +809,9 @@ static void drawLine(devs_ctx_t *ctx, devs_gimage_t *img, int x0, int y0, int x1
}
}

make_writable_image(ctx, img);
img = make_writable_image(ctx, img);
if (img == NULL)
return;

if (h < 0) {
h = -h;
Expand Down Expand Up @@ -902,8 +912,11 @@ void meth11_Image_blit(devs_ctx_t *ctx) {
int xSrcEnd = min(src->width, xSrc + wSrc) << 16;
int ySrcEnd = min(src->height, ySrc + hSrc) << 16;

if (!check)
make_writable_image(ctx, dst);
if (!check) {
dst = make_writable_image(ctx, dst);
if (dst == NULL)
return;
}

for (int yDstCur = yDstStart, ySrcCur = ySrcStart; yDstCur < yDstEnd && ySrcCur < ySrcEnd;
++yDstCur, ySrcCur += ySrcStep) {
Expand Down Expand Up @@ -961,8 +974,8 @@ void meth4_Image_fillCircle(devs_ctx_t *ctx) {
}
}

devs_gimage_xfer_state_t *devs_gimage_prep_xfer(devs_ctx_t *ctx, devs_gimage_t *img, value_t palette,
uint32_t flags, unsigned max_buf) {
devs_gimage_xfer_state_t *devs_gimage_prep_xfer(devs_ctx_t *ctx, devs_gimage_t *img,
value_t palette, uint32_t flags, unsigned max_buf) {
unsigned mode = flags & DEVS_GIMAGE_XFER_MODE_MASK;
devs_gimage_xfer_state_t *state = NULL;

Expand Down
175 changes: 89 additions & 86 deletions runtime/devicescript/protogen.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 7c520f6

Please sign in to comment.