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.