public RayTracer(FrameManager frameManager, int width, int height, int targetFPS, int maxBounce, bool forceCPU) { //ContextFlags improve performance and are ordered by speedup context = new Context(ContextFlags.AggressiveInlining | ContextFlags.FastMath | ContextFlags.Force32BitFloats); context.EnableAlgorithms(); initBestDevice(forceCPU); setResolution(frameManager, width, height, maxBounce); worldData = new WorldData(device); inputManager = new InputManager(); this.targetFPS = targetFPS; run = true; renderThreadTimer = new UpdateStatsTimer(); normalizeMapKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float>, float, float>(Kernels.Normalize); normalizeLightingKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float> >(Kernels.NormalizeLighting); combineKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float>, ArrayView <float>, ArrayView <int> >(Kernels.CombineLightingAndColor); outputKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float>, ArrayView <byte>, Camera>(Kernels.CreatBitmap); outputZbufferKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float>, ArrayView <byte>, Camera>(Kernels.CreateGrayScaleBitmap); TAAKernel = device.LoadAutoGroupedStreamKernel <Index1, dFramebuffer, dFramebuffer, float, float, int>(Kernels.NULLTAA); FilterKernel = device.LoadAutoGroupedStreamKernel <Index1, ArrayView <float>, ArrayView <float>, Camera, int>(Kernels.NULLLowPassFilter); renderKernel = device.LoadAutoGroupedStreamKernel <Index2, dFramebuffer, dWorldBuffer, Camera, int>(RTKernels.RenderKernel); startRenderThread(); }
public void restartRenderer() { displayTimer = new UpdateStatsTimer(); if (rtRenderer != null) { rtRenderer.JoinRenderThread(); rtRenderer.dispose(); rtRenderer = null; } try { rtRenderer = new RayTracer(frame, width, height, targetFPS, maxBounces, forceCPU); } catch (Exception e) { FPS.Content = e.ToString(); Trace.WriteLine(e.ToString()); } }