public override void Initialize()
        {
            base.Initialize();

            // Reset the command list to prep for initialization commands.
            CommandList.Reset(DirectCmdListAlloc, null);

            _waves = new GpuWaves(Device, CommandList, 256, 256, 0.25f, 0.03f, 2.0f, 0.2f);

            _sobelFilter = new SobelFilter(Device, ClientWidth, ClientHeight, BackBufferFormat);

            _offscreenRT = new RenderTarget(Device, ClientWidth, ClientHeight, BackBufferFormat);

            LoadTextures();
            BuildRootSignature();
            BuildWavesRootSignature();
            BuildPostProcessRootSignature();
            BuildDescriptorHeaps();
            BuildShadersAndInputLayout();
            BuildLandGeometry();
            BuildWavesGeometry();
            BuildBoxGeometry();
            BuildMaterials();
            BuildRenderItems();
            BuildFrameResources();
            BuildPSOs();

            // Execute the initialization commands.
            CommandList.Close();
            CommandQueue.ExecuteCommandList(CommandList);

            // Wait until initialization is complete.
            FlushCommandQueue();
        }