Example #1
0
// MakeLeaf
void KDBuildJob::MakeLeaf(kdbuffer_t *kdb)
{
	int n = kdb->node;
	
	leaves[curleaf] = n;

	nodes[n].left = KD_LEAF;
	nodes[n].leafid = curleaf;	

	curleaf++;

	nodes[n].numpolys = kdb->size;
	numleafpolys += kdb->size;

	if(kdb->size > 0)
	{
		nodes[n].polys = (kdpoly_t*)BufferAllocate(polybuffer, nodes[n].numpolys);

	
		for(int i=0; i < kdb->size; i++)
		{
			aabb_t *a = &kdb->aabb[i];

			memcpy(&nodes[n].polys[i].triangle, a->poly->triangle, sizeof(triangle_t));
			memcpy(&nodes[n].polys[i].normal, a->poly->normal, sizeof(normal_t));
			memcpy(&nodes[n].polys[i].color, a->poly->color, sizeof(float[4]));
		}
	}
	
}
Example #2
0
/*----------------------------------------------------------------------*/
static void
BufferUpdate(Widget w)
{
    assert( _XfeBufferType(w) != XmBUFFER_NONE );

    BufferFree(w);
    BufferAllocate(w);
}
Example #3
0
void MakeLeaf(kdbuffer_t *kdb)
{
	int n = kdb->node;

	if(curleaf > 0 && (curleaf % 4) == 0)
	{	
		memcpy_ea(&arg.pleaves[curleaf-4], &leaves, sizeof(int[4]));
	}

	leaves[ curleaf % 4 ] = n;

	kdnode_t node ALIGNED(16);

	node.left = KD_LEAF;
	node.leafid = curleaf;

	curleaf++;
	
	node.numpolys = kdb->size;
	numleafpolys += kdb->size;


	if(kdb->size > 0)
	{
		node.polys = (kdpoly_t*)BufferAllocate(&arg.polybuffer, node.numpolys);

		memcpy_ea(&arg.nodes[n], &node, sizeof(kdnode_t));
	
		int i;

		aabb_t a ALIGNED(16);
		kdpolyp_t poly ALIGNED(16);


		for(i=0; i < kdb->size; i++)
		{						
			memcpy_ls(&a, &kdb->aabb[i], sizeof(aabb_t));
			memcpy_ls(&poly, a.poly, sizeof(kdpolyp_t));

			memcpy_ppe(&node.polys[i].triangle, poly.triangle, sizeof(triangle_t));
			memcpy_ppe(&node.polys[i].normal, poly.normal, sizeof(normal_t));
			memcpy_ppe(&node.polys[i].color, poly.color, sizeof(float[4]));
		}
	}	
	else
	{
		memcpy_ea(&arg.nodes[n], &node, sizeof(kdnode_t));
	}
}