static value loader_loadprim( value prim, value nargs ) { value o = val_this(); value libs; val_check(o,object); val_check(prim,string); val_check(nargs,int); libs = val_field(o,id_loader_libs); val_check_kind(libs,k_loader_libs); if( val_int(nargs) >= 10 || val_int(nargs) < -1 ) neko_error(); { neko_vm *vm = NEKO_VM(); void *ptr = load_primitive(val_string(prim),val_int(nargs),val_field(o,id_path),(liblist**)(void*)&val_data(libs)); vfunction *f; if( ptr == NULL ) { buffer b = alloc_buffer("Primitive not found : "); val_buffer(b,prim); buffer_append(b,"("); val_buffer(b,nargs); buffer_append(b,")"); bfailure(b); } f = (vfunction*)alloc_function(ptr,val_int(nargs),val_string(copy_string(val_string(prim),val_strlen(prim)))); if( vm->pstats && val_int(nargs) <= 6 ) { value env = alloc_array(2); val_array_ptr(env)[0] = f->module; val_array_ptr(env)[1] = (value)(((int_val)f->addr) | 1); f->addr = stats_proxy; f->env = env; } return (value)f; } }
void CL_Collada_Triangles_Impl::load_polylist(CL_DomElement &polylist_element, bool contains_vcount, std::vector<CL_Collada_Source> &sources, CL_Collada_Vertices &vertices, std::vector<CL_Collada_Material> &library_materials) { name = polylist_element.get_attribute("name"); // Find material if (polylist_element.has_attribute("material")) { CL_String material_name = polylist_element.get_attribute("material"); std::vector<CL_Collada_Material>::size_type size, cnt; size = library_materials.size(); for (cnt=0; cnt< size; cnt++) { if (library_materials[cnt].get_id() == material_name) { material = library_materials[cnt]; break; } } if (material.is_null()) throw CL_Exception("Unable to find material"); } triangle_count = polylist_element.get_attribute_int("count", 0); load_inputs(polylist_element, sources, vertices); if (contains_vcount) { CL_DomElement vcount_element = polylist_element.named_item("vcount").to_element(); if (!vcount_element.is_null()) validate_vcount(vcount_element); } CL_DomElement primitive_element = polylist_element.named_item("p").to_element(); if (!primitive_element.is_null()) load_primitive(primitive_element); }