From 2f194a30ff9d6cdf281d35c3b7b93182436650d2 Mon Sep 17 00:00:00 2001 From: Tom Black Date: Mon, 26 Apr 2021 19:33:08 -0500 Subject: Direct draw images --- ext/ruby2d/ruby2d.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'ext') diff --git a/ext/ruby2d/ruby2d.c b/ext/ruby2d/ruby2d.c index c7db19d..bfc8a73 100644 --- a/ext/ruby2d/ruby2d.c +++ b/ext/ruby2d/ruby2d.c @@ -394,34 +394,36 @@ static R_VAL ruby2d_image_ext_init(R_VAL self, R_VAL path) { /* - * Ruby2D::Image#ext_render + * Ruby2D::Image#self.ext_draw */ #if MRUBY -static R_VAL ruby2d_image_ext_render(mrb_state* mrb, R_VAL self) { +static R_VAL ruby2d_image_ext_draw(mrb_state* mrb, R_VAL self) { + mrb_value a; + mrb_get_args(mrb, "o", &a); #else -static R_VAL ruby2d_image_ext_render(R_VAL self) { +static R_VAL ruby2d_image_ext_draw(R_VAL self, R_VAL a) { #endif + // `a` is the array representing the image + R2D_Image *img; - r_data_get_struct(self, "@data", &image_data_type, R2D_Image, img); + r_data_get_struct(r_ary_entry(a, 0), "@data", &image_data_type, R2D_Image, img); - img->x = NUM2DBL(r_iv_get(self, "@x")); - img->y = NUM2DBL(r_iv_get(self, "@y")); + img->x = NUM2DBL(r_ary_entry(a, 1)); + img->y = NUM2DBL(r_ary_entry(a, 2)); - R_VAL w = r_iv_get(self, "@width"); - R_VAL h = r_iv_get(self, "@height"); + R_VAL w = r_ary_entry(a, 3); + R_VAL h = r_ary_entry(a, 4); if (r_test(w)) img->width = NUM2INT(w); if (r_test(h)) img->height = NUM2INT(h); - R2D_RotateImage(img, NUM2DBL(r_iv_get(self, "@rotate")), R2D_CENTER); + R2D_RotateImage(img, NUM2DBL(r_ary_entry(a, 5)), R2D_CENTER); - R_VAL c = r_iv_get(self, "@color"); - img->color.r = NUM2DBL(r_iv_get(c, "@r")); - img->color.g = NUM2DBL(r_iv_get(c, "@g")); - img->color.b = NUM2DBL(r_iv_get(c, "@b")); - img->color.a = NUM2DBL(r_iv_get(c, "@a")); + img->color.r = NUM2DBL(r_ary_entry(a, 6)); + img->color.g = NUM2DBL(r_ary_entry(a, 7)); + img->color.b = NUM2DBL(r_ary_entry(a, 8)); + img->color.a = NUM2DBL(r_ary_entry(a, 9)); R2D_DrawImage(img); - return R_NIL; } @@ -1210,8 +1212,8 @@ void Init_ruby2d() { // Ruby2D::Image#ext_init r_define_method(ruby2d_image_class, "ext_init", ruby2d_image_ext_init, r_args_req(1)); - // Ruby2D::Image#ext_render - r_define_method(ruby2d_image_class, "ext_render", ruby2d_image_ext_render, r_args_none); + // Ruby2D::Image#self.ext_draw + r_define_class_method(ruby2d_image_class, "ext_draw", ruby2d_image_ext_draw, r_args_req(1)); // Ruby2D::Sprite R_CLASS ruby2d_sprite_class = r_define_class(ruby2d_module, "Sprite"); -- cgit v1.2.3