void DebugDisplaySkeleton::InitWithSkinnedMesh(SkinnedMesh * in_skeleton) { unsigned int bone_count = in_skeleton->GetJointCount(); skeleton_displays.push_back(DebugDisplaySkeletonInner()); //Vertex Format DescVertexFormat skeleton_display_vertex_format; skeleton_display_vertex_format.Initialize(1); skeleton_display_vertex_format[0].SetName("POSITION"); skeleton_display_vertex_format[0].SetChannels(3); skeleton_display_vertex_format[0].SetOffset(0); skeleton_display_vertex_format[0].SetSemanticIndex(0); skeleton_display_vertex_format[0].SetStreamIndex(0); skeleton_display_vertex_format[0].SetStride(sizeof(float) * 3); skeleton_display_vertex_format[0].SetType(DT_FLOAT); //Vertex Buffer DescVertexBuffer skeleton_display_vertex_buffer; skeleton_display_vertex_buffer.SetByteCount(sizeof(float) * 3 * bone_count); skeleton_display_vertex_buffer.SetStride(sizeof(float) * 3); skeleton_display_vertex_buffer.SetUsage(BUFFER_USAGE_STREAM); skeleton_display_vertex_buffer.SetInitialDataPointer(0); //Index Buffer DescIndexBuffer skeleton_display_index_buffer; skeleton_display_index_buffer.SetByteCount(sizeof(unsigned int) * 2 * bone_count); skeleton_display_index_buffer.SetPrimitiveType(PRIMITIVE_LINE_LIST); skeleton_display_index_buffer.SetUsage(BUFFER_USAGE_STREAM); FixedArray<unsigned char> index_data(sizeof(unsigned int) * 2 * bone_count); skeleton_display_index_buffer.SetInitialDataPointer(index_data.GetData()); //Init Index Buffer values. unsigned int * i_buffer_data = (unsigned int *) index_data.GetData(); i_buffer_data[0] = 0; i_buffer_data[1] = 0; for (unsigned int i = 1; i < bone_count; ++i) { i_buffer_data[i*2] = in_skeleton->GetSkeleton()->GetJoint(i).GetParentIndex(); i_buffer_data[i*2+1] = i; } //Bind VertexBuffer renderer->CreateResource(skeleton_display_vertex_buffer, &skeleton_displays.back().skeleton_display_vertex_buffer); skeleton_displays.back().skeleton_display_vertex_buffer.format_hash = renderer->GetVertexFormatHash(skeleton_display_vertex_format); renderer->CreateResource(skeleton_display_index_buffer, &skeleton_displays.back().skeleton_display_index_buffer); skeleton_displays.back().skinned_mesh = in_skeleton; renderer->CreateInputLayout(skeleton_displays.back().skeleton_display_vertex_buffer.format_hash, &shader_program); }
static void x_get_frame(QSP_ARG_DECL Movie *mvip,uint32_t n,Data_Obj *dp) { Data_Obj *src_dp; src_dp = (Data_Obj *)mvip->mvi_data; if( OBJ_FRAMES(src_dp) > 1 ){ /* BUG won't work right if nseqs > 1 ... */ char index[16]; sprintf(index,"[%d]",n); src_dp = index_data(QSP_ARG src_dp,index); } if( dp_same(QSP_ARG src_dp,dp,"x_get_frame") ) return; dp_copy(QSP_ARG dp,src_dp); }