6

限られたメモリ(512kフラッシュ、32k RAM)を備えた32ビットプロセッサ用のアプリケーションをプログラミングしています。

このデバイスのディスプレイは、16ビットカラーの128x160であり、プロセッサでバッファリングすると、通常は40kRAMを消費します。RAMがあまりないので、画面データをその場で生成するためのテクニック、ヒント、トリック、アイデアを探しています。

役立つかもしれないこと:

  • おそらくあなたはこの種の制限のためのリソースを知っています
  • 多分あなたはその場で魅力的なグラフィックを生成しました
  • ディスプレイをスキャンしているときに、プログラムメモリ内の要素(アルファブレンディングを含む)をオンザフライで組み合わせるために使用できる一般的なアルゴリズムはありますか?
  • 単純なベクターレンダリング技術(または無料(bsd / mit / apache)ソース)
  • ???

乗算器はありますが、浮動小数点プロセッサはありません。ディスプレイ自体には、ディスプレイ用の非常にシンプルなコントローラーとメモリがありますが、読み取りと書き込みにはコストがかかるため、回避できるのであれば、それをワークスペースとして使用したくありません。

-アダム

4

4 に答える 4

8

ある意味で、あなたは、Tandys、Spectrums、初期のPCの時代とほぼ同じ状況のゲーム開発者です。だから、ここに私の推奨事項があります:

あなたはコンピュータグラフィックスに関するマイケルアブラッシュの著作を読むべきです。それらは、浮動小数点コプロセッサーがオプションのハードウェアであった時代に書かれ、古い(おそらく「悪い」)ソフトウェアレンダリングの時代に使用された多くの基本的な技術(ブレゼンハムの線など)を説明しています。 。

彼の「ブラックブック」のほとんどはここで読むことができます。

さらに、ここでは、ほとんどの人がグラフィックプログラミングを学ぶために当時使用していた古いBBSファイルをたくさん見つけることができます。グラフィックやラインなどを検索するだけです。

お役に立てば幸いです。

更新:画面に物を描く最初の試みでこれを使用したことも思い出します。その背後にある数学を理解するためにどれだけの時間を費やしたかはわかりません(まあ、公平を期すために、私は当時15歳でした)。3Dの非常に優れた(そして単純な)入門書であり、変換、ポリゴンフィラー、および補間に関する非常に優れたプレミアです。

于 2008-10-06T13:41:14.423 に答える
3

画面にはどのようなデータが表示されますか?

写真画像でない場合は、パレットの使用を検討できます。例:ピクセルあたり8ビットを使用する256カラーパレットには20kbが必要です(さらにルックアップテーブルの場合は256 x 2バイト)。これは少なくとも40kbよりも優れています。

于 2008-10-06T13:44:55.557 に答える
2

このような状況に対処するための基本的なテクニックは、画面を狭い横縞に分割し、そのような縞を 2 つだけ RAM にバッファリングすることだと思います。次のストライプをレンダリングしている間、1 つのストライプが表示されます。スキャンする「ビーム」が次のストライプに当たると (そしてキャッチするために割り込みが発生します)、2 つを入れ替えて次のストライプの描画を開始します。

これの厄介な副作用は、各ストライプのレンダリングに費やすことができる時間に厳しいタイミング制限があることです. そのため、スプライトのように、退屈だがパフォーマンスが予測可能なものに固執するのは魅力的だと思います。

ちょっと話が逸れますが、これがニンテンドーDSの3Dハードウェアの仕組みです。同じ y 座標の周りにあまりにも多くのポリゴンをレンダリングしようとすると、これを見ることができます。画面の更新がレンダリング ハードウェアを追い越すと、ポリゴンがランダムにちらつき、ドロップアウトします。

また、パレット化されたレンダリングを使用するという他のポスターの提案を支持します。16 ビット ピクセルで高速な計算を行うのは非常に困難ですが、パレットのレイアウト方法に優れている場合は、8 ビットで高速に計算できます。

于 2008-10-06T14:17:27.300 に答える
0

優れたグラフィックスと低メモリを組み合わせるいくつかのアイデア:

  • 背景とスプライトをフラッシュに保存します。
  • 動的に生成されたグラフィックスをパレットを使用して RAM に保存し、バイトを半分にします。
  • LCD ドライバのウィンドウ機能を使用して、必要な画面の部分だけを更新します。
于 2008-10-26T14:45:42.237 に答える