Yanesdk 改造中(8)

さらに原因を探してみると、どうやらメモリに関連付けたデバイスコンテキストと、ウインドウに関連付けたデバイスコンテキストの ChoosePixelFormat の結果が同じでないと共有出来ないようです。
昨日の成功したビデオカードの場合は、値が異なってても共有できましたが、失敗したビデオカードの場合は、同じ値が返されるようにしないと失敗するみたいです。


で、同じフラグを立てたら当然同じ値が返ってくるわけですが、それだけで大丈夫なのかというとそうでもなくて、メモリデバイスコンテキストに対して PFD_Flags.PFD_DOUBLEBUFFER を指定すると、ChoosePixelFormat で同じ値が返されますが、SetPixelFormat で失敗します。
つまり、昨日のビデオカードはメモリデバイスコンテキストに対してダブルバッファリングが指定できないということです。
共有しようと思うのであれば当然、ウインドウデバイスコンテキストの方もダブルバッファリングを除ける必要があります。
そうすれば一応共有は出来ますが、ダブルバッファリングが効いていないのでちらつきます。


解決策としては、

  1. OpenGL1.1以降の機能を使う。
  2. ウインドウのバッファをメモリデバイスコンテキストに作って、手動でダブルバッファリングを行う。ウインドウへの描画がメモリ→メモリになるので遅くなると思われ。
  3. 複数の組み合わせを試して、共有できる最適なパターンを見つけ出して、どうしてもそれが出来なかった場合だけ↑の方法を使う。
  4. あまりのめんどさにサジを投げる。
  5. ちらつきなんかシラネ('A`)

ぐらいですかね。


それに、このビデオカードでちゃんと動いても、別のビデオカードだとどうやっても絶対に共有できないとかも考えられるので、無駄骨に終わる可能性もあることを考えるとちょっと厳しいかもしれないですね……(;´Д`)