예제 #1
0
        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();
        }
예제 #2
0
        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());
            }
        }