/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { isRun_ = false; renderTask_.Wait(); MyGPUProfiler.Dispose(); scene_.Dispose(); ShaderManager.Dispose(); GraphicsCore.Dispose(); }
/// <summary> /// /// </summary> public void InitializeRenderer() { #if true GraphicsCore.Initialize(renderCtrl); Input.Initialize(renderCtrl); #else int width = (int)RenderImage.DesiredSize.Width; int height = (int)RenderImage.DesiredSize.Height; width = (width < 128) ? 128 : width; height = (height < 128) ? 128 : height; GraphicsCore.InitializeForWPF(RenderImage); Input.Initialize(RenderImage); #endif // シェーダ ShaderManager.Initialize("asset/shader/shader.lst"); ShaderManager.DefaultShader = "Unlit"; // プロファイラ MyGPUProfiler.Initialize(); // ライト GraphicsCore.LightPos = new Vector4(0, 100000, 0, 1); // シーン scene_ = new GameScene(); //scene_ = new TestScene(); DataContext = scene_.ViewModel; #if true // リサイズコールバック bool requireResize = false; renderCtrl.SizeChanged += (o, e) => { if (renderCtrl.Width == 0 || renderCtrl.Height == 0) { return; } requireResize = true; }; // レンダースレッド isRun_ = true; renderTask_ = new Task(() => { while (isRun_) { // リサイズ if (requireResize) { GraphicsCore.ResizeTargetPanel((int)renderCtrl.Width, (int)renderCtrl.Height); scene_.ScreenSizeChanged((int)renderCtrl.Width, (int)renderCtrl.Height); requireResize = false; } // 描画 var context = GraphicsCore.ImmediateContext; scene_.Update(); MyGPUProfiler.BeginFrameProfiling(context); scene_.Draw(); MyGPUProfiler.EndFrameProfiling(context); GraphicsCore.Present(); UpdateProfiler(); } ; }); renderTask_.Start(); #else // リサイズコールバック RenderImage.SizeChanged += (o, e) => { if (e.NewSize.Width == 0 || e.NewSize.Height == 0) { return; } GraphicsCore.ResizeTargetPanel((int)e.NewSize.Width, (int)e.NewSize.Height); scene_.ScreenSizeChanged((int)e.NewSize.Width, (int)e.NewSize.Height); }; // 初回描画後に一回テクスチャを更新 ContentRendered += (o, e) => { GraphicsCore.ResizeTargetPanel((int)RenderImage.DesiredSize.Width, (int)RenderImage.DesiredSize.Height); scene_.ScreenSizeChanged((int)RenderImage.DesiredSize.Width, (int)RenderImage.DesiredSize.Height); }; // 描画コールバック設定 //ComponentDispatcher.ThreadIdle += (o, e) => { CompositionTarget.Rendering += (o, e) => { scene_.Update(); MyGPUProfiler.BeginFrameProfiling(GraphicsCore.D3dCurrentContext); scene_.Draw(); MyGPUProfiler.EndFrameProfiling(GraphicsCore.D3dCurrentContext); GraphicsCore.Present(); UpdateProfiler(); }; #endif }