11 byte model_tree[MAX_SUBMODELS][MAX_SUBMODELS+1];
12 g3s_instance_context context_array[MAX_SUBMODELS];
15 void new_draw_polygon_model(polymodel *po,grs_bitmap **model_bitmaps,vms_angvec *anim_angles,fix light,fix *glow_values)
18 g3s_instance_context saved_context;
20 //first, build a tree of the parts. This is ugly. The tree should be stored
23 for (i=0;i<po->n_models;i++)
24 model_tree[i][0] = -1;
26 Assert(po->submodel_parents[0] == 0xff);
28 for (i=1;i<po->n_models;i++) {
30 p = po->submodel_parents[i];
31 for (j=0;model_tree[p][j]!=-1;j++)
34 model_tree[p][j+1]=-1;
37 //now, go through model recursively, saving instance context for each submodel
39 instance_model_part(po,0,anim_angles);
41 //now, do whatever sorting on the part of the model you want
43 //we don't do any sorting, now
45 //lastly, render our parts
47 g3_get_instance_context(&saved_context); //save before we start mucking with it
49 for (i=0;i<po->n_models;i++) {
51 g3_set_instance_context(&context_array[i]);
53 g3_draw_polygon_model(&po->model_data[po->submodel_ptrs[i]],model_bitmaps,anim_angles,light,glow_values);
56 g3_set_instance_context(&saved_context); //restore now that we're done
61 instance_model_part(polymodel *po,int part_number,vms_angvec *anim_angles)
65 g3_start_instance_angles(&po->submodel_offsets[part_number],anim_angles?&anim_angles[part_number]:NULL);
67 g3_get_instance_context(&context_array[part_number]);
69 for (i=0;model_tree[part_number][i]!=-1;i++)
70 instance_model_part(po,model_tree[part_number][i],anim_angles);