public CudaIntersectionDevice(RayEngineScene scene, NVContext ctx) : base(scene) { wallclock = new Stopwatch(); this.todoRayBuffers = new ConcurrentQueue<Tuple<int, RayBuffer>>(); this.doneRayBuffers = new List<ConcurrentQueue<RayBuffer>>() { { new ConcurrentQueue<RayBuffer>() } }; this.started = false; if (ctx != null) { this.cudaContext = ctx; } else { this.cudaContext = new NVContext() { Context = new CudaContext(CudaContext.GetMaxGflopsDeviceId()) }; } using (var sr = new StreamReader(@"G:\Git\RayDen\CudaMegaRay\x64\Release\kernel.cu.ptx")) { intersectKernel = cudaContext.Context.LoadKernelPTX(sr.BaseStream, "IntersectLBvh"); } this.rays = new CudaDeviceVariable<RayData>(RayBuffer.RayBufferSize); this.hits = new CudaDeviceVariable<RayHit>(RayBuffer.RayBufferSize); verts = scene.Vertices.ToArray(); //scene.Triangles.Select(i => i.GetInfo()).ToArray(); var ti = scene.Triangles.Select(i => i.GetInfo()).ToArray(); var da = new BvhDataAdapter(scene); var treeData = da.GetMpData(); bvh = treeData; trianglesCount = ti.Length; tris = ti; nodesCount = treeData.Length; Tracer.TraceLine("BVH Data Size {0:F3} MBytes", (treeData.Length * 32f) / (1024f * 1024f)); }
public DadeCudaIntersectionDevice(RayEngineScene scene, NVContext ctx) : base(scene) { this.scene = scene; wallclock = new Stopwatch(); this.todoRayBuffers = new InputRayBufferCollection(); this.doneRayBuffers = new OutputRayBufferCollection(); this.started = false; if (ctx != null) { this.cudaContext = ctx; } else { this.cudaContext = new NVContext() { Context = new CudaContext(CudaContext.GetMaxGflopsDeviceId()) }; } using (var sr = new StreamReader(@"G:\Git\RayDen\CudaMegaRay\x64\Release\Intersection.cu.ptx")) { intersectKernel = cudaContext.Context.LoadKernelPTX(sr.BaseStream, "Intersect"); } this.rays = new CudaDeviceVariable<RayData>(RayBuffer.RayBufferSize); this.hits = new CudaDeviceVariable<RayHit>(RayBuffer.RayBufferSize); verts = scene.Vertices.ToArray(); tris=scene.Triangles.Select(i => i.GetInfo()).ToArray(); if (GlobalConfiguration.Instance.UseSceneCaching && scene.Cache != null) { bvh = scene.Cache.BvhData; nodesCount = scene.Cache.BvhData.Length; } else { var da = new BvhDataAdapter(scene); var treeData = da.BuildData(); bvh = treeData; nodesCount = treeData.Length; } Tracer.TraceLine("BVH Data Size {0:F3} MBytes", (nodesCount * 32f) / (1024f * 1024f)); }