Browse Source

* Bind caca_fill_triangle_textured

tags/v0.99.beta17
Pascal Terjan pterjan 15 years ago
parent
commit
0b87b254c2
1 changed files with 57 additions and 0 deletions
  1. +57
    -0
      ruby/caca-canvas.c

+ 57
- 0
ruby/caca-canvas.c View File

@@ -451,6 +451,62 @@ static VALUE fill_triangle(VALUE self, VALUE x1, VALUE y1, VALUE x2, VALUE y2, V
return self;
}

static VALUE fill_triangle_textured(VALUE self, VALUE coords, VALUE texture, VALUE uv)
{
caca_canvas_t *ctexture;
int i, l;
int ccoords[6];
float cuv[6];
VALUE v;

l = RARRAY(coords)->len;
if(l != 6 && l != 3)
{
rb_raise(rb_eArgError, "invalid coords list");
}
for(i=0; i<l; i++)
{
v = rb_ary_entry(coords, i);
if(l==6)
ccoords[i] = NUM2INT(v);
else
{
if((TYPE(v) != T_ARRAY) || (RARRAY(v)->len != 2))
rb_raise(rb_eArgError, "invalid coords list");
ccoords[2*i] = NUM2INT(rb_ary_entry(v, 0));
ccoords[2*i+1] = NUM2INT(rb_ary_entry(v, 1));
}
}

l = RARRAY(uv)->len;
if(l != 6 && l != 3)
{
rb_raise(rb_eArgError, "invalid uv list");
}
for(i=0; i<l; i++)
{
v = rb_ary_entry(uv, i);
if(l==6)
cuv[i] = NUM2DBL(v);
else
{
if((TYPE(v) != T_ARRAY) || (RARRAY(v)->len != 2))
rb_raise(rb_eArgError, "invalid uv list");
ccoords[2*i] = NUM2DBL(rb_ary_entry(v, 0));
ccoords[2*i+1] = NUM2DBL(rb_ary_entry(v, 1));
}
}

if(CLASS_OF(texture) != cCanvas)
{
rb_raise(rb_eArgError, "texture is not a Caca::Canvas");
}
Data_Get_Struct(texture, caca_canvas_t, ctexture);

caca_fill_triangle_textured(_SELF, ccoords, ctexture, cuv);
return self;
}

static VALUE dither_bitmap(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h, VALUE d, VALUE pixels)
{
if(CLASS_OF(d) != cDither)
@@ -638,6 +694,7 @@ void Init_caca_canvas(VALUE mCaca)
rb_define_method(cCanvas, "draw_triangle", draw_triangle, 7);
rb_define_method(cCanvas, "draw_thin_triangle", draw_thin_triangle, 6);
rb_define_method(cCanvas, "fill_triangle", fill_triangle, 7);
rb_define_method(cCanvas, "fill_triangle_textured", fill_triangle_textured, 4);
rb_define_method(cCanvas, "dither_bitmap", dither_bitmap, 6);

rb_define_method(cCanvas, "frame_count", get_frame_count, 0);


Loading…
Cancel
Save