[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectXDraw>初期化処理

初期化処理

では、前回のコードを下にしてDirectDrawの初期化処理を書きましょう。

using System;
using System.Drawing;
using System.Windows.Forms;

//###################################
//追加
using Microsoft.DirectX;
using Microsoft.DirectX.DirectDraw;

//###################################


namespace DDrawTest1
{
public class Program
{
/// <summary>
/// アプリケーションのエントリポイント
/// </summary>
/// <param name="argv"></param>
public static void Main(string []argv)
{
Application.Run(new DDrawTest());
}
}

// ウィンドウを作りたいのでフォームを継承
public class DDrawTest:Form
{
//クライアント領域のサイズ
const int clientHeight =600;
const int clientWight =800;

public DDrawTest():base()
{
//固定サイズのフォーム
this.FormBorderStyle = FormBorderStyle.FixedSingle;
//サイダかボタン無し
this.MaximizeBox = false;
//クライアント領域サイズ
this.ClientSize = new Size(clientWight,clientHeight);

this.directDrawInitialize();

}

private Device device_;
private Surface primarySurface_;
private Surface secondarySuface_;
private Clipper clipper_;

//ここが心臓部DirectDrawの初期化
private void directDrawInitialize()
{
//デバイスを作成
device_ = new Device();

//デバイスの協調レベルを設定
device_.SetCooperativeLevel(this,CooperativeLevelFlags.Normal);

//サーフィスを作成するための情報
SurfaceCaps caps =new SurfaceCaps();
SurfaceDescription desc =new SurfaceDescription();

//プライマリサーフィスの作成
caps.PrimarySurface =true;
desc.SurfaceCaps =caps;
primarySurface_ =new Surface(desc ,device_);

//情報をリセット(セカンダリサーフィスを作るため)
caps.Clear();
desc.Clear();

//セカンダリサーフィスの作成
desc.Width = clientWight;
desc.Height =clientHeight;
desc.SurfaceCaps =caps;
secondarySuface_ = new Surface(desc,device_);

//クリッパーの作成
clipper_ =new Clipper(device_);
clipper_.Window =this;

//プライマリサーフェスにクリッパーをセット
primarySurface_.Clipper =clipper_;

}
}
}

いきなりコードをドベッとでごめんなさい。でも、載せないとダメなのです。しかもこのコード実行してもいつものウィンドウが出るだけなのです。もう本当に初期化しかしていません。

それではコードの詳細な説明と行きたいところなのですが、残念ながら手元に全てを解説している本がないのです。しかも、DirectDrawに関してはGoogleで調べてもろくな情報が出てこない。もう八方ふさがりです。

そういう事情がある訳なので利都の独自解釈で勘弁してください。と言っても私はC++でDirectXをした事もなければVBでDirectDrawを利用したわけでもありません。間違っている事があればフォローして頂けるとありがたいです。

デバイスの作成

恐らくビデオカードその他を含めたデバイスの機能や働きを規定している物だと思います。DirectXではハードウェアでのサポートを前提としての高速化が行われています。しかし、物によってはハードウェアで全ての機能をサポートしていない場合もあります。このようにDirectXではハードウェアに依存する物を作るため、機能を提供してもらうときの元となるクラスが「Device」になるのだと思います。

協調レベル

全く分かりません。主な利用法はフルスクリーン時と普通のウィンドウ時でデバイスをどのように利用するかを変える事だと思います。でも、何か他にもごちゃごちゃとフラグがあるので他の機能もあるかもしれません。

サーフィス(Surface)

「表面」という意味があるらしいです。DirectDrawではよく使う事になるクラスです。平たく言えばビットマップと同じような物です。要するにこの上に絵を描けばいいらしいです。

プライマリ、セカンダリというのはハードディスクのアレと一緒です。「プライマリ」に描いた絵が画面に表示されます。その際「セカンダリ」はバックバッファとなるわけです。そして絵を描くときはバックバッファである「セカンダリ」に描画を行います。そして完成した絵が描かれた「セカンダリ」を「プライマリ」と取り替える事で見ている人は一瞬で絵が描かれたかのような錯覚を起こすという訳です。この動作をするために2つのサーフェイスが必要なわけです。

クリッパー

デバイスの協調よりも意味不明です。本来の意味は「クリップ」から来ているらしいです。つまり何かを束ねているのでしょう。(何かは分かりません)


今回はこのくらいで勘弁してください。入門にするはずだったのに全然入門になっていません。すごく知識が必要です。もしかしたら、書いている私の方が皆さんより知識が無いかもしれません。

とりあえず次回はいよいよ真っ黒な画面を出します。(ごめんなさいまだそこまでしか勉強していないのです)


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-3-3
[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectXDraw>初期化処理