« C# でも「はちゅね」 | トップページ | iriver Story HD買いました »

2011年8月24日 (水)

はちゅね追記

昨日の記事に対してさっそく突っ込みをいただきましたので紹介します。

ソースのForm1.csの中にglContrl1_SizeChangedというイベントハンドラがあります。このイベントハンドラは、glControl1(OpenTKが提供する、OpenGLで描画できるコントロール)の初期化が終わらないうちに呼ばれてしまうようで、初期の版ではGLメソッドの呼び出しでNullReferenceExceptionが起きていました。

何か変だと思いつつ、しかたがないので昨日のプログラムでは、Hatyuneインスタンスが作成済みかどうかをチェックするという気持ち悪い方法で回避しているのですが、

実は、GLControlのSizeChangedイベントが、GLの初期化が行われる前に呼び出されるというのはGLControlの仕様なのだそうです。それで、SizeChangedイベントハンドラでは、必ずGLControl.IsHandleCreatedというプロパティを見て、falseなら何もしないで戻るように書くものなのだそうです。

ドキュメントは一通り読んでいるつもりが、そういう記述の記憶はなかったので、どこに書いてあるのと聞いたら「OpenTKのソース中にコメントで書いてある」って…。どうしてそれが仕様ということになるかな。わけがわからないよ

« C# でも「はちゅね」 | トップページ | iriver Story HD買いました »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/285638/41342336

この記事へのトラックバック一覧です: はちゅね追記:

« C# でも「はちゅね」 | トップページ | iriver Story HD買いました »