Microsoft DirectX 8.0 (Visual Basic)

シーンの開始とエンディング

Microsoft® Visual Basic® アプリケーションでは、Direct3DDevice8.BeginScene メソッドを呼び出して、Microsoft Direct3D® にシーンのレンダリングの開始を知らせる。BeginScene を呼び出すと、システムはその内部データ構造およびレンダリング ステートの可用性と有効性をチェックする。内部フラグを設定して、シーンが進行中であることを示す。シーンの開始後は、さまざまなレンダリング メソッドを呼び出してプリミティブをレンダリングしたり、シーンのオブジェクトを構成する頂点を個別にレンダリングすることができる。シーンの処理中でないときにレンダリング メソッドを呼び出そうとすると失敗する。詳細については、「プリミティブのレンダリング」を参照すること。

シーンが完了したら、Direct3DDevice8.EndScene メソッドを呼び出す。EndScene メソッドは、キャッシュされているデータをフラッシュし、レンダリング サーフェスの完全性を検証し、シーンが進行中であることを伝える内部フラグをクリアする。

レンダリング メソッドはすべて、BeginScene メソッドを呼び出してから EndScene メソッドを呼び出すまでの間に実行しなければならない。サーフェスが消失するか、または内部エラーが発生すると、シーンのメソッドは失敗し、Err.Number にエラー コードが設定される。BeginScene メソッドが失敗した場合、シーンは開始されず、それに続く EndScene の呼び出しも失敗する。レンダリング中にサーフェスが失われた場合、EndScene は失敗する。

これらのケースを以下にまとめる。

たとえば、次に示すのは、単純なシーンを処理するコードである。

On Local Error Resume Next

Call d3dDevice.BeginScene
If Err.Number = DD_OK Then
    ' シーンの開始に成功した場合のみ、
    ' プリミティブをレンダリングする。

    ' シーンを閉じる。
    Call d3dDevice.EndScene
    If Err.Number <> DD_OK Then
        ' エラー処理コード。
    End If
End If

シーンを埋め込むことはできない。つまり、次のシーンをレンダリングするには、現在レンダリング中のシーンを完了する必要がある。BeginScene が呼び出されていないのに EndScene を呼び出した場合、エラーが返される。同様に、前のシーンが EndScene メソッドでまだ完了していないときに BeginScene を呼び出すと、エラーが発生する。

シーンのレンダリング中 (BeginScene を呼び出してから EndScene を呼び出すまでの間)、レンダリング ターゲットやテクスチャなどの Direct3D サーフェスに対して GDI 関数を呼び出してはならない。この関数を呼び出そうとすると、GDI 操作の結果が表示されなくなる可能性がある。アプリケーションで GDI 関数を使用する場合は、シーン関数の外ですべての GDI の呼び出しを行うようにする。