タグ付けされた質問 「memory」

4
C ++ゲームはメモリ割り当てエラーをどのように処理しますか?
私はC ++で書かれているが例外を使用しないいくつかのゲームを知っています。C ++でのメモリ割り当てエラーの処理は一般にstd::bad_alloc例外を中心に構築されているため、これらのゲームはどのようにそのようなエラーを処理しますか? それらは単にクラッシュしますか、またはメモリ不足エラーを処理して回復する別の方法がありますか?

2
GPUはテクスチャとVRAMをどのように処理しますか?
実際には、相互に関連する一連の質問です。 圧縮パイプライン(dxt5 / dxt1など)は、レンダリングパイプラインを通過するときに完全に解凍されますか? 最初の質問の答えが正しい場合、いくつかの大きな非圧縮テクスチャのメモリはどのように管理されますか? フレームバッファーは最新のGPUのVRAMとは異なりますか?
18 textures  gpu  memory 

2
起動時に大量のメモリを割り当てて解放すると、「メモリをクリーンアップしますか?」
ブックコンプリート、第4版コーディングゲーム、第5章(ゲームの初期化およびシャットダウン)、セクションのメモリーをチェックするには、この興味深いコードサンプルが含まれています。 bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical memory."); return false; } …
18 c++  memory 

3
メモリー不足状態にどのように準備しますか?
これは、明確に定義された範囲のゲームにとっては簡単ですが、問題はサンドボックスゲームについてであり、プレイヤーは何でも作成および構築できます。 可能なテクニック: 上限のあるメモリプールを使用します。 定期的に不要になったオブジェクトを削除します。 回復メカニズムとして後で解放できるように、最初に余分な量のメモリを割り当てます。約2〜4 MBです。 これは、16 GB PCとは異なり、メモリが通常制限されているモバイル/コンソールプラットフォームで発生する可能性が高くなります。メモリの割り当て/割り当て解除を完全に制御でき、ガベージコレクションが関与していないことを前提としています。これが、これをC ++としてタグ付けする理由です。 私が話していないですので、予めご了承ください効果的なC ++項目7「メモリ不足の条件のために準備して、」それは、関連だにもかかわらず、私はより多くのあなたが、通常は何をより詳細に制御を持っているゲーム開発に関連する答えを見たいのですが、ハプニング。 質問をまとめると、メモリコンソール/モバイルが限られているプラ​​ットフォームをターゲットにしている場合、サンドボックスゲームのメモリ不足状態にどのように対応しますか?

3
CPU-GPUメモリデータフロー[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 私は初心者のグラフィックプログラマで、最近疑問に思っています-モデルデータ(メッシュとマテリアル)はアプリケーション(CPUメモリ)からグラフィックカード(GPUメモリ)にどのように流れますか?静的モデル(建物など)があり、一度ロードしてセットアップすると、アプリの有効期間中は変更されません。 そのデータはGPUメモリに一度だけ送信され、永遠にそこに座っていますか? モデルが各フレームで実際にレンダリングされるとき、GPUプロセッサはGPUメモリから毎回そのデータをフェッチする必要がありますか?つまり、2つのモデルをそれぞれ複数回レンダリングした場合、最初のモデルを複数回レンダリングしてから2番目のモデルを複数回レンダリングするか、最初のモデルを1回だけレンダリングし、2番目のモデルを1回だけレンダリングして、そのようにインターリーブし続けましたか?この意味で、この質問を「内部GPUデータフロー」と呼ぶことができます。 明らかにグラフィックカードのRAMは限られています-1フレームのレンダリングに必要なすべてのモデルデータを保持できない場合、フレームごとにCPU RAMから(一部)を取得し続けると思いますが、それは正しいですか? インターネットにはこれに関する本や資料がたくさんあることは知っていますが、このデータフローを管理する方法に関する簡単な一般的なガイドラインがあります(何をいつ送信し、いつ、どのようにレンダリングするか)。 編集: 私は1つの区別をするのを忘れ:ありますGPUにデータを送信し、そこの設定/電流としてバッファを結合。後者はデータフローを引き起こしますか? Edit2: Raxvanの投稿を読んだ後、いくつかのアクションを区別したいと思います。 初期化によるバッファ作成 バッファデータの更新(データがCPUラムに保持されている場合は簡単で、GPUラムに保持されている場合はGPUからCPUラムにフェッチする必要があります) バッファをアクティブとしてバインドします(これは、次の描画呼び出しでこのバッファをレンダリングすることをAPIに伝える方法であり、それ自体では何もしませんか?) API draw call(ここで実際に何が起こるかをお聞きしたい)

5
チャンクサイズが2のべき乗であることが多いのはなぜですか?
そこには多くのMinecraftクローンがあり、私は自分の実装に取り​​組んでいます。テレインレンダリングの原則は、全世界を固定サイズのチャンクでタイリングして、ローカライズされた変更の労力を減らすことです。 Minecraftでは、現在のところ、チャンクサイズは16 x 16 x 256です。また、クローンでは、常に2のべき乗のチャンクサイズを見ました。 その理由はありますか、おそらくパフォーマンスやメモリに関連していますか?2のべき乗はバイナリコンピューターで特別な役割を果たすことを知っていますが、チャンクサイズとは何の関係がありますか?

1
メモリが正しく処理されていないかどうかをどのように知ることができますか?
私の(2D)ゲームのメモリフットプリントは、テクスチャをロードするたびに増加するようです。たとえば、ゲームを開始するとき、30 MBのプライベートRAMを使用します。 54 MBのプライベートRAM。 同じことは、同じ距離を移動した後、2つのポイント間を繰り返し往復した後に発生します。 しかし、私の読み出しは、プログラムがテクスチャが画面から消えてから約1秒後にglDeleteTexturesを正しく呼び出していることを示しています。valgrindはリークを検出していません。 これについて心配する必要があるかどうか、またはOSがメモリをページングする方法の単なる癖であるかどうかを知るにはどうすればよいですか?
12 opengl  memory 

3
アセットにカスタムメモリ管理が必要なのはなぜですか?
ゲームプログラミングに関連するほとんどすべてのリソース、特に3Dオープンワールドゲームでは、ディスク、システムメモリ、ビデオメモリとの間でアセットを常にアンロードおよびリロードする必要がある方法について説明しています。コンソールには、オーバーフローの可能性に対処できない非常に単純なメモリ管理スキームがあるため、これを理解できます。 ただし、PCでは状況が大きく異なります。システムメモリ用にOSによって提供される仮想メモリがあり、グラフィックドライバがCPUからGPUへのスワッピングを処理します。それでは、一度にすべてをロードするだけでは不十分であり、プリフェッチのみを処理し、必要なアセットがスワップされている間はブロックされないようにする必要があるのはなぜですか? これは、すべてがのように単純に割り当てられていると言っているのではありませんmalloc。すべてが隣接し、キャッシュ一貫性が保たれます。とにかく手動でページを出し入れすることを心配する必要がない場合は、メモリアクセスを効率的にする方が間違いなく簡単です... 更新: 非同期バッファー転送に少し読み込んだ後、グラフィックスドライバーが自動的にメモリをページインおよびページアウトする方法が最適ではないことがわかりました。これはCPUリソースにも当てはまりますか。つまり、仮想メモリが存在する場合でも、特定のリソースをいつロードおよびアンロードするかを常に手動で管理する方が良いでしょうか。

1
SpriteBuilderのSmart Sprite Sheetをメモリにロードする必要がありますか?
SpriteBuilderを使用してスマートスプライトシートフォルダーを作成して公開する場合、そのSpriteSheetをコードを使用してメモリ "FrameCache"にロードする必要がありますか、それともSpriteBuilderがこれを自動的に実行します(つまり、SpriteSheet内の任意の画像にアクセスする必要がありますか?)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.