Лучший способ подавить текстуру OpenGL ES (iPhone) / объем памяти OpenAL? - PullRequest
1 голос
/ 23 октября 2010

Что мне делать? У меня есть 512x512 PNG. Я сжал их до PVR (что приводит к ужасному качеству), и я готовлюсь сжать PNG с помощью инструмента pngcrush. PVR имеют примерно в 2-х раз больший размер файла, чем PNG, возможно, я могу поэкспериментировать с файлами JPG.

Изображения хранятся в сжатом состоянии в памяти? Или сжатие учитывается только в процессе загрузки? Или изображения / текстуры отображаются несжатыми в памяти?

Тот же квестон идет на звуки. Я пробовал разные форматы, такие как wav, mp3, aac, aiff (caf), но кажется, что при подключении soundManager используется тот же объем памяти.

Есть ли способ уменьшить фактическое потребление памяти, или сжатия предназначены только для ускорения загрузки текстуры / звука?

Пожалуйста, пролите мне свет.

Ответы [ 4 ]

1 голос
/ 23 октября 2010

Вы всегда будете иметь полные данные в вашей оперативной памяти. Для текстур я ничего не могу порекомендовать, но для звука вы можете использовать монофайлы. Это уменьшит необходимый размер на 50%. Вы также можете поэкспериментировать с битрейтом ваших звуковых файлов.

0 голосов
/ 12 февраля 2012

Что-то осталось невысказанным.

Для звуковых файлов отличный способ уменьшить размер (как в оперативной памяти, так и в размере приложения) - это использовать формат caf.

Конвертировать файлы, используя что-то вроде этого:

/usr/bin/afconvert -f caff -d ima4 $1.aiff $1.caf
0 голосов
/ 24 октября 2010

Что касается звуков, то вы можете попробовать их буферизовать - это означает, что они читают файлы по мере необходимости, а затем отбрасывают данные после их воспроизведения.

Обратите внимание, что это не очень полезно, если ваши звуки маленькие (скажем, взрывы) и могут на самом деле принести больше вреда, чем нет (потому что он должен читать файл каждый раз, когда проигрывает) - это зависит от того, как часто он воспроизводится конечно.

Где эта техника используется, это такие вещи, как музыка; в 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

0 голосов
/ 23 октября 2010

Сжатые текстуры используют меньше оперативной памяти, поскольку они хранятся в сжатом виде в VRAM и работают в сжатом виде.

Таким образом, со сжатыми текстурами вы получаете преимущества при загрузке и хранении VRAM.

...