当前位置: 首页>>代码示例>>C#>>正文


C# Device.TestCooperativeLevel方法代码示例

本文整理汇总了C#中Device.TestCooperativeLevel方法的典型用法代码示例。如果您正苦于以下问题:C# Device.TestCooperativeLevel方法的具体用法?C# Device.TestCooperativeLevel怎么用?C# Device.TestCooperativeLevel使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Device的用法示例。


在下文中一共展示了Device.TestCooperativeLevel方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: MainWindow

        /// <summary>
        /// 最上位ウインドウを作成
        /// </summary>
        public MainWindow()
        {
            // コンポーネント初期化
            InitializeComponent();

            // ウインドウが読み込まれたら
            this.Loaded += (sender, e) =>
            {
                // Direct3D作成
                var direct3D = new SlimDX.Direct3D9.Direct3D();

                // デバイスを初期化
                Device device = null;

                // ティーポッドと文字列を初期化
                Mesh teapod = null;
                Mesh helloWorld = null;

                // バッファーウインドウ作成
                IntPtr handle = new HwndSource(0, 0, 0, 0, 0, "buffer", IntPtr.Zero).Handle;

                // デバイスを作成
                device = new Device(direct3D, 0,
                    DeviceType.Hardware,
                    handle,
                    CreateFlags.HardwareVertexProcessing,
                    new PresentParameters()
                    {
                        BackBufferFormat = Format.X8R8G8B8,
                        BackBufferCount = 1,
                        BackBufferWidth = (int)this.Width,
                        BackBufferHeight = (int)this.Height,
                        Multisample = MultisampleType.None,
                        SwapEffect = SwapEffect.Discard,
                        EnableAutoDepthStencil = true,
                        AutoDepthStencilFormat = Format.D16,
                        PresentFlags = PresentFlags.DiscardDepthStencil,
                        PresentationInterval = PresentInterval.Default,
                        Windowed = true,
                        DeviceWindowHandle = handle
                    });

                // ティーポッドと文字列を作成
                teapod = Mesh.CreateTeapot(device);
                helloWorld = Mesh.CreateText(device, new System.Drawing.Font("Arial", 10), "Hello, world!", 0.001f, 0.001f);

                // 光源描画を有効化
                device.SetRenderState(RenderState.Lighting, true);

                // 光源を設定
                device.SetLight(0, new Light()
                {
                    Type = LightType.Directional,
                    Diffuse = Color.White,
                    Ambient = Color.GhostWhite,
                    Direction = new Vector3(0.0f, -1.0f, 0.0f)
                });

                // 光源を有効化
                device.EnableLight(0, true);

                //射影変換を設定
                device.SetTransform(TransformState.Projection,
                    Matrix.PerspectiveFovLH((float)(Math.PI / 4),
                    (float)(this.Width / this.Height),
                    0.1f, 20.0f));

                //ビューを設定
                device.SetTransform(TransformState.View,
                    Matrix.LookAtLH(new Vector3(3.0f, 2.0f, -3.0f),
                    Vector3.Zero,
                    new Vector3(0.0f, 1.0f, 0.0f)));

                //マテリアル設定
                device.Material = new Material()
                {
                    Diffuse = new Color4(Color.GhostWhite)
                };

                // 描画される時に描画処理を実行
                CompositionTarget.Rendering += (sender2, e2) =>
                {
                    // 画像をロックしてバックバッファーに設定
                    this.directXImage.Lock();
                    this.directXImage.SetBackBuffer(D3DResourceType.IDirect3DSurface9, device.GetBackBuffer(0, 0).ComPointer);

                    // フロントバッファーがあれば
                    if (directXImage.IsFrontBufferAvailable)
                    {
                        // デバイスの現在の状態を確かめて失敗したら
                        if (device.TestCooperativeLevel().IsFailure)
                        {
                            // 例外
                            throw new Direct3D9Exception("デバイスが無効です");
                        }

                        // 全面灰色でクリア
//.........这里部分代码省略.........
开发者ID:aokomoriuta,项目名称:StudiesOfOpenTK,代码行数:101,代码来源:MainWindow.cs

示例2: Main

 static void Main()
 {
     //C#+フォームの標準準備
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     
     //フォームの準備(SlimDXではRenderFormも使用可能)
     var form = new FrmMain();// new RenderForm();
     //終了イベントを捕捉
     form.FormClosed += new FormClosedEventHandler(form_FormClosed);
     PresentParameters pp;
     //SlimDXのDeviceを準備
     var device = new Device(new Direct3D(), 0, DeviceType.Hardware, form.Handle, CreateFlags.HardwareVertexProcessing, pp = new PresentParameters()
     {
         BackBufferWidth = form.ClientSize.Width,
         BackBufferHeight = form.ClientSize.Height
     });
     //トゥーンテクスチャのパスを準備(SlimMMDXではトゥーンフォルダを別に用意する必要がある)
     string[] toonTexPath = new string[10];
     string baseDir = Path.GetDirectoryName(Application.ExecutablePath);
     for (int i = 1; i <= 10; ++i)
     {
         toonTexPath[i - 1] = Path.Combine(baseDir, Path.Combine("toons", "toon" + i.ToString("00") + ".bmp"));
     }
     //SlimMMDXのセットアップ(他の機能よりも先に使用する)
     SlimMMDXCore.Setup(device, toonTexPath);
     //SlimMMDXCore.Instance.UsePhysics = false;
     //モデルの読み込み
     MMDModel model = SlimMMDXCore.Instance.LoadModelFromFile("Models/miku.pmd");
     //モーションの読み込み
     MMDMotion motion = SlimMMDXCore.Instance.LoadMotionFromFile("Motions/TrueMyHeart.vmd");
     //モーションのセットアップ
     model.AnimationPlayer.AddMotion("TrueMyHeart", motion, MMDMotionTrackOptions.UpdateWhenStopped);
     //時間管理フラグ
     long beforeCount = -1;
     bool deviceLost = false;
     //メインループ
     MessagePump.Run(form, () =>
     {
         //経過時間を計算
         float timeStep;
         if (beforeCount < 0)
         {
             timeStep = 0.0f;
             beforeCount = Stopwatch.GetTimestamp();
         }
         else
         {
             timeStep = ((float)(Stopwatch.GetTimestamp() - beforeCount)) / (float)Stopwatch.Frequency;
             beforeCount = Stopwatch.GetTimestamp();
         }
         if (PlayFlag)
         {
             model.AnimationPlayer["TrueMyHeart"].Reset();
             model.PhysicsManager.Reset();
             model.AnimationPlayer["TrueMyHeart"].Start();
             PlayFlag = false;
         }
         //SlimMMDXCoreのUpdate処理
         SlimMMDXCore.Instance.Update(timeStep);
         if (deviceLost)
         {
             if (device.TestCooperativeLevel() == ResultCode.DeviceNotReset)
             {
                 device.Reset(pp);
                 SlimMMDXCore.Instance.OnResetDevice();
                 deviceLost = false;
             }
         }
         if (!deviceLost)
         {
             try
             {
                 //描画処理
                 device.BeginScene();
                 //画面のクリア
                 device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.CornflowerBlue, 1.0f, 0);
                 //モデルの描画
                 model.Draw();
                 //描画処理の終了
                 device.EndScene();
                 device.Present(Present.None);
             }
             catch (Direct3D9Exception e)
             {
                 if (e.ResultCode == ResultCode.DeviceLost)
                 {
                     SlimMMDXCore.Instance.OnLostDevice();
                     deviceLost = true;
                 }
                 else
                     throw;
             }
         }
         //速度合わせ
         if (timeStep < 0.016666)
             Thread.Sleep((int)(16.66666 - timeStep * 1000.0f));
     });
     //SlimMMDXの解放処理
     foreach (var item in ObjectTable.Objects)
//.........这里部分代码省略.........
开发者ID:himapo,项目名称:ccm,代码行数:101,代码来源:Program.cs


注:本文中的Device.TestCooperativeLevel方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。