Esempio n. 1
0
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);
	
}
Esempio n. 2
0
File: xmvi.c Progetto: E-LLP/QuIP
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);
}