 
 		const aten::ShapeParameter* realShape = (s->shapeid >= 0 ? &ctxt->shapes[s->shapeid] : s);
 
-		funcGetSamplePosNormalArea[realShape->type](&result, ctxt, s, sampler);
+		funcGetSamplePosNormalArea[realShape->type](&result, ctxt, realShape, sampler);
 
 		auto dir = result.pos - org;
 		r = aten::ray(org, dir);

	aten::LightSampleResult*, Context*, const aten::LightParameter*, const aten::vec3&, aten::sampler*);

typedef void(*FuncGetSamplePosNormalArea)(
	aten::hitable::SamplePosNormalPdfResult*, Context*, aten::ShapeParameter*, aten::sampler*);

__device__ void getSphereSamplePosNormalArea(
	aten::hitable::SamplePosNormalPdfResult* result,
	Context* ctxt, 
	aten::ShapeParameter* shape,
	aten::sampler* smpl)
{
	AT_NAME::sphere::getSamplePosNormalArea(result, shape, smpl);

__device__ void getTriangleSamplePosNormalArea(
	aten::hitable::SamplePosNormalPdfResult* result,
	Context* ctxt, 
	const aten::ShapeParameter* shape,
	aten::sampler* sampler)
{
	int r = sampler->nextSample();
