QD3D 85 - RAVE と DrawSprocket の統合 (更新日: 98年 4 月 20 日)
Q: アプリケーションで RAVE と DrawSprocket を統合するにはどうすればよいですか。
A: RAVE も DrawSprocket もシングルバッファリングおよびダブルバッファリングを行うので、両方を統合できればたいへんよいのですが、残念ながら、近未来的にも、統合するためのリソースがありません。
両者を統合する最も簡単な方法は、ディスプレイの選択と構成だけを DrawSprocket で行い、バッファリングはすべて
RAVE にまかせるという方法です。RAVE エンジンはバッファリングやピクセルのコピーをすべてハードウェアでできる可能性があるので、この方法には意味があります。
最初に、すべての RAVE エンジンのリストを辿り、作成中のアプリケーションで使用可能なエンジンのリストを作成します。エンジンのリストの作成が済んだら、次に、エンジンをサポートしない
GDevices をそのリストから除外します。これを行う方法は、デバイスリストを辿り、それぞれのデバイスについて、すべてのエンジンに対して
QAEngineCheckDevice でチェックすることです。どのエンジンもサポートしないデバイスがあったら、そのモニターの
DrawSprocket コンテキストを確保することで、そのエンジンをリストから削除することができます。このコンテキストは実際にアクティブにすることはないので、DSpGetFirstContext
で最初の有効なモードを取得して、その情報を基にコンテキストを確保してください。
利用可能な GDevices のリストの作成が済んだら、DrawSprocket を呼び出して有効なコンテキストを探してください。レンダリングは
RAVE で行うので、ページ数には 1 を指定してコンテキストを確保してください。こうすると、DrawSprocket
はバックバッファを割り当てません。
コンテキストをアクティブにしたら、選択した RAVE エンジンのうちのいずれかがそのデバイスで動作することをテストしなければなりません。3D
アクセラレータには一定のビデオ深度でしか動作しないものがあるので、モードが切り替わった直後に、もう一度
QAEngineCheckDevice でチェックする必要があります。現在のアクセラレータは数千色であればほとんど動作します。
DrawSprocket コンテキストを解放したり、DrawSprocket にビデオモードの変更を許可する場合は、その前に、すべての
RAVE コンテキスト情報とテクスチャを削除しなければなりません。解像度を変更すると、グラフィックスカードのメモリを再設定しなければならないこともあり、RAVE
バッファやテクスチャメモリに影響します。
別の方法として、そのデバイスで動作する 3D ハードウェアがない場合は、ユーザにモニタを選択してもらい、単純に自分のソフトウェアエンジンをデフォルトで使う、という方法もあります。
-- Timothy Carroll
devsupport@apple.com
[ Technical Q&A's : Graphics & Media : QuickDraw 3D [QD3D] : : QD3D 85 ]
|