2008/06/18

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

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

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

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

2008/06/09

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

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



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

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

2008/06/01

気が変わったので

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クラスのコンストラクタを作り直した。
・・・とかまだ公開してないコードの説明書いても、
しょうがないのだけど、
まぁ、予告ということで。