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(); }