2008年6月18日水曜日

放置してたフルスクリーンモードの件、

前に、フルスクリーンモードにすると
なぜかわからないが描画速度が極端に遅くなってしまう、
と、書いていたが、
一応解決策が見つかった。
・・・たぶん。

これまた、なぜかわからんが、
フルスクリーンモードの時に
wglMakeCurrent関数を呼び出すと、
極端に描画が遅くなるっぽい。
(glGetErrorでエラーをチェックしても、エラーは出てない。)
普通はこの関数を呼び出してレンダリングコンテキストを設定してから
フレームの描画を始めると思うのだが、
たまたまこれを呼び出すのを忘れたまま実行したら、
描画速度が落ちずにスムーズに動いた。

とにかく、
フルスクリーンモードの時は、
毎フレームごとの描画時に
wglMakeCurrent
を呼びだしてはいかんらしい。
・・・なぜかはわからないが。

2008年6月9日月曜日

VisualStudioのデザイナに対応させてみた

OpenGLで描画するためのコントロールを用意して、
初期化時のピクセルフォーマットの指定をデザイナ画面で設定できるようにしてみた。
ちゃんとアンチエイリアスの指定とかも(ハードウェアでサポートされていれば)できます。



自分で作成したクラスなどをデザイナで扱えるようにするためには、
プロパティやクラスにデザイナ用の機能を提供する属性をくっつけていけばいいらしい。
参考資料はこちら。
http://www.microsoft.com/japan/msdn/net/general/vsnetpropbrow.aspx

PixelFormatDescripterクラスなどに
けっこう手を加える必要があったが、
なかなかおもしろいものができたかも。

2008年6月1日日曜日

気が変わったので

GLSharpに、
アンチエイリアス等のOpenGLのエクステンションを使用した
レンダリングコンテキストの作成機能を実装してみた。
サイトへのアップはもう少しかかります。


// * class Form1 : Form の中。

RenderingContext context;
protected override void OnHandleCreated( EventArgs e )
{
base.OnHandleCreated( e );

PixelFormatDescriptor pfd = new PixelFormatDescriptor();
PixelFormatAttributes pfa = new PixelFormatAttributes();
pfa.SampleBuffers = true; //←ここと
pfa.Samples = 4; //←ここで、マルチサンプリング(=アンチエイリアス)を設定。
IntPtr hdc = win32.GetDC( this.Handle );

context = new RenderingContext( hdc, pfd, pfa, null );
context.MakeCurrent();
gl.LoadAll();
glu.LoadAll();

if( context.Format.Attributes != null && context.Format.Attributes.Samples != 0 )
gl.Enable( EnableCap.Multisample );
}


と、こんな感じで使えるようになった。
PixelFormatAttributes、ContextFormatというクラスを新たに作って、
RenderingContextクラスのコンストラクタを作り直した。
・・・とかまだ公開してないコードの説明書いても、
しょうがないのだけど、
まぁ、予告ということで。