本文整理汇总了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("デバイスが無効です");
}
// 全面灰色でクリア
//.........这里部分代码省略.........
示例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)
//.........这里部分代码省略.........