基本的なフルスクリーンを表示します。
終了は[Eac]です。
using System; using System.Drawing; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; namespace Project3 { /// <summary> /// MD3D3 の概要の説明です。 /// </summary> public class MD3D3:Form { private Size fullScreenSize = new Size(800,600); public MD3D3():base() { //最小サイズを設定 this.MinimumSize=new Size(80,60); //サイズと枠線の変更 this.FormBorderStyle = FormBorderStyle.None; this.Size = fullScreenSize; //ウィンドウの名前(かっこいいのを付けてあげてください) this.Text ="Direct3D-My"; this.KeyDown+=new KeyEventHandler(MD3D3_KeyDown); } private Device device_; private PresentParameters presentParam_; /// <summary> /// Direct3Dの初期化を行います。 /// </summary> /// <returns>初期化が成功したかどうか</returns> public bool DXInitialize() { try { //プレゼンテーションパラメータを作成 presentParam_ = new PresentParameters(); //ウィンドウモード presentParam_.Windowed =false; //スワップエフェクトを設定。 presentParam_.SwapEffect = SwapEffect.Discard; presentParam_.BackBufferHeight = fullScreenSize.Height; presentParam_.BackBufferWidth = fullScreenSize.Width; presentParam_.BackBufferFormat =Format.X8R8G8B8; presentParam_.FullScreenRefreshRateInHz =60; //デバイスを作成 device_ = new Device(0,DeviceType.Hardware,this ,CreateFlags.HardwareVertexProcessing,presentParam_); creatVertex(); //初期化成功 return true; } catch { //初期化失敗 return false; } } /// <summary> /// 頂点バッファ /// </summary> private VertexBuffer vertexBuffer_; /// <summary> /// 頂点バッファ作成関数 /// </summary> private void creatVertex() { //頂点バッファ領域を確保 vertexBuffer_ = new VertexBuffer(typeof(CustomVertex.TransformedColored), 6, device_, 0, CustomVertex.TransformedColored.Format, Pool.Managed); //バッファをロック GraphicsStream stm = vertexBuffer_.Lock(0,0,0); //頂点データの配列を作成 CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[6]; //頂点データ verts[0].X=50;verts[0].Y=250;verts[0].Z=0.5f; verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.LightPink.ToArgb(); verts[1].X=150;verts[1].Y=50;verts[1].Z=0.5f; verts[1].Rhw=1; verts[1].Color = System.Drawing.Color.Aqua.ToArgb(); verts[2].X=250;verts[2].Y=250;verts[2].Z=0.5f;verts[2].Rhw=1; verts[2].Color = System.Drawing.Color.Brown.ToArgb(); verts[3].X=350;verts[3].Y=50;verts[3].Z=0.5f; verts[3].Rhw=1; verts[3].Color = System.Drawing.Color.Black.ToArgb(); verts[4].X=450;verts[4].Y=250;verts[4].Z=0.5f;verts[4].Rhw=1; verts[4].Color = System.Drawing.Color.Red.ToArgb(); verts[5].X=550;verts[5].Y=50;verts[5].Z=0.5f; verts[5].Rhw=1; verts[5].Color = System.Drawing.Color.Green.ToArgb(); //頂点データをバッファに書き込み stm.Write(verts); //バッファのロックを解除 vertexBuffer_.Unlock(); } public void Render() { if(device_==null)return; if(this.WindowState ==FormWindowState.Minimized)return; //クリア処理 device_.Clear(ClearFlags.Target,Color.Blue,1.0f,0); //描画開始 device_.BeginScene(); //頂点バッファをセット device_.SetStreamSource(0,vertexBuffer_,0); //頂点バッファのフォーマットをセット device_.VertexFormat = CustomVertex.TransformedColored.Format; //描画 device_.DrawPrimitives(PrimitiveType.TriangleStrip,0,4); //描画終わり device_.EndScene(); try { //更新 device_.Present(); } catch(DeviceLostException ex) { resetDevice(); } } /// <summary> /// デバイスのリセットを行う /// </summary> private void resetDevice() { int result; if(!device_.CheckCooperativeLevel(out result)) { if(result ==(int)ResultCode.DeviceLost) { //ちょっと待つ System.Threading.Thread.Sleep(10); } else if(result ==(int)ResultCode.DeviceNotReset) { device_.Reset(presentParam_); } } } private void MD3D3_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode ==Keys.Escape)this.Close(); } } /// <summary> /// エントリクラス /// </summary> class Program { public static void Main() { using(MD3D3 dxform =new MD3D3()) { if(!dxform.DXInitialize()) { MessageBox.Show("Direct3Dの初期化に失敗しました。","初期化の失敗"); return; } dxform.Show(); while(dxform.Created) { dxform.Render(); Application.DoEvents(); } } } } }