/* * Draw the animated bones of the model * */ void model_iqm_draw_anim_bones(struct iqm_model *model) { int i; glDisable(GL_DEPTH_TEST); for (i=0; i<model->skeleton->num_bones; i++) { struct iqm_bone *b = model->skeleton->bones+i; glBegin(GL_LINES); if (b->parent >= 0) { struct iqm_bone *pb = model->skeleton->bones + b->parent; glColor3f(0,0.5,0.5); glVertex3f(pb->anim_matrix[12], pb->anim_matrix[13], pb->anim_matrix[14]); } else { glColor3f(0,0.5,1); glVertex3f(0,0,0); } glVertex3f(b->anim_matrix[12], b->anim_matrix[13], b->anim_matrix[14]); glEnd(); glRasterPos3f(b->anim_matrix[12], b->anim_matrix[13], b->anim_matrix[14]); _draw_string(GLUT_BITMAP_HELVETICA_10, b->name); } glEnable(GL_DEPTH_TEST); }
static int _render_line(TEXTST_RENDER *p, TEXTST_BITMAP *bmp, const BD_TEXTST_REGION_STYLE *base_style, BD_TEXTST_REGION_STYLE *style, uint8_t **p_ptr, int *p_elem_count, int xpos, int ypos, int *baseline_pos) { FT_Face face = NULL; /* select font */ _update_face(p, &face, style); while ( (*p_elem_count) > 0) { BD_TEXTST_DATA *elem = (BD_TEXTST_DATA*)*p_ptr; (*p_ptr) += sizeof(BD_TEXTST_DATA); (*p_elem_count)--; switch (elem->type) { case BD_TEXTST_DATA_STRING: xpos = _draw_string(face, elem->data.text.string, elem->data.text.length, bmp, xpos, ypos, style, baseline_pos); (*p_ptr) += elem->data.text.length; break; case BD_TEXTST_DATA_NEWLINE: return xpos; case BD_TEXTST_DATA_FONT_ID: style->font_id_ref = elem->data.font_id_ref; _update_face(p, &face, style); break; case BD_TEXTST_DATA_FONT_STYLE: style->font_style = elem->data.style.style; style->outline_color = elem->data.style.outline_color; style->outline_thickness = elem->data.style.outline_thickness; if (style->font_style.outline_border) { TEXTST_ERROR("textst_render: unsupported style: outline\n"); } break; case BD_TEXTST_DATA_FONT_SIZE: style->font_size = elem->data.font_size; _update_face(p, &face, style); break; case BD_TEXTST_DATA_FONT_COLOR: style->font_color = elem->data.font_color; break; case BD_TEXTST_DATA_RESET_STYLE: memcpy(style, base_style, sizeof(*style)); _update_face(p, &face, style); break; default: TEXTST_ERROR("Unknown control code %d\n", elem->type); break; } } return xpos; }