Ignore:
Timestamp:
Dec 7, 2009 5:46:18 PM (5 years ago)
Author:
pterjan
Message:
  • Bind caca_fill_triangle_textured
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/ruby/caca-canvas.c

    r3587 r4103  
    452452}
    453453
     454static VALUE fill_triangle_textured(VALUE self, VALUE coords, VALUE texture, VALUE uv)
     455{
     456    caca_canvas_t *ctexture;
     457    int i, l;
     458    int ccoords[6];
     459    float cuv[6];
     460    VALUE v;
     461
     462    l = RARRAY(coords)->len;
     463    if(l != 6 && l != 3)
     464    {
     465        rb_raise(rb_eArgError, "invalid coords list");
     466    }
     467    for(i=0; i<l; i++)
     468    {
     469        v = rb_ary_entry(coords, i);
     470        if(l==6)
     471            ccoords[i] = NUM2INT(v);
     472        else
     473        {
     474            if((TYPE(v) != T_ARRAY) || (RARRAY(v)->len != 2))
     475                    rb_raise(rb_eArgError, "invalid coords list");
     476            ccoords[2*i] = NUM2INT(rb_ary_entry(v, 0));
     477            ccoords[2*i+1] = NUM2INT(rb_ary_entry(v, 1));
     478        }
     479    }
     480
     481    l = RARRAY(uv)->len;
     482    if(l != 6 && l != 3)
     483    {
     484        rb_raise(rb_eArgError, "invalid uv list");
     485    }
     486    for(i=0; i<l; i++)
     487    {
     488        v = rb_ary_entry(uv, i);
     489        if(l==6)
     490            cuv[i] = NUM2DBL(v);
     491        else
     492        {
     493            if((TYPE(v) != T_ARRAY) || (RARRAY(v)->len != 2))
     494                    rb_raise(rb_eArgError, "invalid uv list");
     495            ccoords[2*i] = NUM2DBL(rb_ary_entry(v, 0));
     496            ccoords[2*i+1] = NUM2DBL(rb_ary_entry(v, 1));
     497        }
     498    }
     499
     500    if(CLASS_OF(texture) != cCanvas)
     501    {
     502        rb_raise(rb_eArgError, "texture is not a Caca::Canvas");
     503    }
     504    Data_Get_Struct(texture, caca_canvas_t, ctexture);
     505
     506    caca_fill_triangle_textured(_SELF, ccoords, ctexture, cuv);
     507    return self;
     508}
     509
    454510static VALUE dither_bitmap(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h, VALUE d, VALUE pixels)
    455511{
     
    639695    rb_define_method(cCanvas, "draw_thin_triangle", draw_thin_triangle, 6);
    640696    rb_define_method(cCanvas, "fill_triangle", fill_triangle, 7);
     697    rb_define_method(cCanvas, "fill_triangle_textured", fill_triangle_textured, 4);
    641698    rb_define_method(cCanvas, "dither_bitmap", dither_bitmap, 6);
    642699
Note: See TracChangeset for help on using the changeset viewer.