1

私は何をすべきか?私は512x512のpngをいくつか持っています。私はそれらを PVR に圧縮し (ひどい品質になります)、pngcrush ツールで PNG を圧縮する準備をしています。PVR のファイルサイズは PNG よりも約 2x-x 大きいので、JPG ファイルで実験できるかもしれません。

画像は圧縮された状態でメモリに保存されていますか? または、圧縮は読み込みプロセスでのみカウントされますか? それとも、画像/テクスチャはメモリ内で圧縮されていない状態でマッピングされていますか?

同じ質問が音にも当てはまります。wav、mp3、aac、aiff (caf) など、さまざまな形式を試しましたが、soundManager をアタッチすると同じサイズのメモリが消費されるようです。

実際のメモリ消費を減らす方法はありますか、または圧縮はテクスチャ/サウンドの読み込みを高速化するためだけですか?

光を当ててください。

4

4 に答える 4

1

RAMには常に完全なデータがあります。テクスチャについては何もお勧めできませんが、サウンドについてはモノラル ファイルを使用できます。これにより、必要なサイズが 50% 削減されます。サウンド ファイルのビット レートを試すこともできます。

于 2010-10-23T12:20:36.803 に答える
0

圧縮されたテクスチャは、VRAM に圧縮されて保存され、圧縮された形式で操作されるため、RAM の使用量が少なくなります。

そのため、圧縮されたテクスチャを使用すると、アップロードと VRAM ストアで利点が得られます。

于 2010-10-23T15:15:20.817 に答える
0

サウンドに関しては、バッファリングを試すことができます。つまり、必要に応じてファイルから読み取り、再生後にデータを破棄します。

これは、サウンドが小さい場合 (爆発など) には実際には役に立たず、実際にはそうでない場合よりも害を及ぼす可能性があることに注意してください (再生するたびにファイルを読み取る必要があるため) - もちろん、再生される頻度によって異なります。

この手法が使用されるのは音楽などです。OpenAL では、以下を使用して小さなオーディオ セグメントをバッファリングできます。

alSourceQueueBuffers(source, numbuffers, buffers);

キューに入れられ、既に処理されたバッファの数をチェックする関数もあります:

ALint numqueued, numprocessed;
// total number, including the already-processed buffers!
alGetSourcei(source, AL_BUFFERS_QUEUED, &numqueued);
// number of buffers played completely
alGetSourcei(source, AL_BUFFERS_PROCESSED, &numprocessed);

処理されたバッファの数を取得したら、完了したものを単純にアンキュー (および削除) できます。

ALuint processed[numprocessed];
// fills "processed" with the buffers that have been removed
alSourceUnqueueBuffers(source, numprocessed, processed);

...そして最後に、バッファを削除します (未使用の場合):

alDeleteBuffers(numprocessed, processed);

詳細については、OpenAL プログラマー ガイド(PDF 警告)を参照してください: http://connect.creativelabs.com/openal/Documentation/OpenAL_Programmers_Guide.pdf

于 2010-10-23T21:08:38.970 に答える
0

何かが言い残されました。

サウンド ファイルの場合、(RAM サイズとアプリ サイズの両方で) サイズを小さくする優れた方法は、caf 形式を使用することです。

次のようなものを使用してファイルを変換します。

/usr/bin/afconvert -f caff -d ima4 $1.aiff $1.caf
于 2012-02-12T11:09:44.353 に答える