Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        /// <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
        }