OpenGL DisplayList с использованием видеопамяти

Можно ли сохранить данные списка отображения в памяти видеокарты? Я хочу использовать только видеопамять как Video Buffer Object(VBO) для хранения DisplayList. Но когда я пытаюсь это сделать, он всегда использует основную память вместо видеопамяти. Я тестировал на nVidia GeForce 8600GTS и GTX260.

2 ответа

Решение

Списки отображения - очень старая функция, которая восходит к OpenGL-1.0. Они давно устарели. В любом случае вы все равно можете использовать их по причинам совместимости.

Работа OpenGL предотвращает хранение списков отображения только в памяти графического процессора. Графический сервер (как его называет OpenGL) является чисто абстрактной вещью, и спецификация гарантирует, что то, что вы помещаете в списки отображения, всегда доступно. Однако в современных графических процессорах объем памяти ограничен, поэтому данные полезной нагрузки могут быть выгружены и выгружены при необходимости.

По сути, память GPU - это кэш для данных в системной памяти (так же, как системная память должна обрабатываться как кэш для хранения).

Более того, современные графические процессоры могут давать сбой, и драйверы будут выполнять полный сброс, создавая впечатление, что все работает нормально. Но после сброса все данные в памяти GPU должны быть повторно инициализированы.

Поэтому OpenGL необходимо хранить копии всех данных полезной нагрузки в памяти для обеспечения бесперебойной работы.

Следовательно, вполне нормально, чтобы ваши данные отображались как потребляющие системную память. Хотя весьма вероятно, что списки отображения также кэшируются в памяти графического процессора.

Списки отображения устарели. Вы можете использовать VBO с индексами вершин, чтобы использовать графическую память, и нарисовать его с glDrawElements,

Другие вопросы по тегам