上に戻る
6.高速にレンダリングしたい
概要
 前述のとおり、VRAMアクセスは、悲しいほど低速度でしか行なえません。
 これは、vblank中しかVRAMにアクセスしてはいけないことに起因します。
 ためしに、アクセスするようなコーディングをすると、エミュによって異なるイロイロな反応を見せてしまうようです。
 しかし、何とかVRAMに高速にアクセスできないでしょうか。
どうでもいいこと
 「レンダリング」って言葉間違ってる?
 VRAMに画像を転送することをレンダリングって呼んでるのですが……
 ま、間違ってたらそれでいいやw ぷれさべー語です。
方針
 「できないでしょうか」とか言いながら、まぁやることはわかってます。
 サブ画面を開く瞬間のレンダリング速度は非常に高速です。
 何故そんな事が出来るのでしょうか。
 実は、画面表示をOFFにすればいつでもVRAMにアクセスして問題ないらしいです。
 サブ画面を開く瞬間の暗転しきったときに、画面をOFFにして、必要なグラフィックをレンダリング、画面をONにして、フェードインさせています。
 この仕掛けを、高速レンダリングに利用できないでしょうか。
フラッシュレンダリング
 明らかな問題は、画面をOFFにする必要があることです。
 画面がOFFということは、その間画面に表示されるものがなくなるということです。
 適当なタイミングで、画面をOFFにして、しばらく経ってONにすると、画面に透過色の帯が現れることになります。
 加えて、帯の下側の表示位置が狂ってしまうようです。
 実機でもそうなるかはわかりませんが、多くのエミュでこうなりました。

 で、この解決法ですが……
 思い切って、これを演出とすることにしました。
 帯の下側が狂うのはいただけませんが、まぁ我慢ですw
 さらに、画面をOFFにする前に、抜き色の色を変更します。
 これで、画面をフラッシュさせることで、無表示でありながら、特殊効果っぽく出来ます。

 なんだか、ちょっとかなりすごく美観を損ないますが、しかしながら、1フレームのうちに64キャラクタ分(1024バイト)とか書き換えられるのは大きな魅力です。
実装
 解説とかなくソースを置いておきます。
ソース
 いつものとおり、nesのアセンブリソースの公開方法なんて知らないので、使うとなると大幅な手直しが必要になりそうです。
 というか、そんなに手直しできる人だったら自分で作るから使わねぇw
 一体誰向きのウェブサイトなんだなというのは、このウェブサイト作ったときから感じていたことです。
その他
 なにもパターンテーブルだけでなく、ネームテーブルにもアクセスできます。
 数フレームで画面全体書き終えると思うので、ダイナミックなBG演出が出来る……かもねー……
 やっぱりフラッシュさせるしかないのがネックですけど。
(106)2008年11月30日 プレさ兵衛
inserted by FC2 system