예제 #1
0
        public void Draw(RenderTarget2D renderTarget, ITracingOptions tracingOptions, GameTime gameTime)
        {
            _shader.Begin(renderTarget);

            // compute shader requires batching in power of 2, so must input next power of 2
            // shader will auto. discard anything outside of texture range
            var x = _pow.First(x => x >= renderTarget.Width);
            var y = _pow.First(y => y >= renderTarget.Height);

            var width  = renderTarget.Width - 1;
            var height = renderTarget.Height - 1;

            // inject parameters
            _shader.SetParameter("eye", tracingOptions.Camera.Position);
            _shader.SetParameter("direction", tracingOptions.Camera.Direction);
            _shader.SetParameter("time", (float)gameTime.TotalGameTime.TotalSeconds);

            // hardcoded to chunks of 8x8 in compute shader
            _shader.Execute(x / 8, y / 8, 1);
            _shader.End();
        }