OpenGL DisplayList с использованием видеопамяти
Можно ли сохранить данные списка отображения в памяти видеокарты? Я хочу использовать только видеопамять как Video Buffer Object(VBO) для хранения DisplayList. Но когда я пытаюсь это сделать, он всегда использует основную память вместо видеопамяти. Я тестировал на nVidia GeForce 8600GTS и GTX260.
2 ответа
Списки отображения - очень старая функция, которая восходит к OpenGL-1.0. Они давно устарели. В любом случае вы все равно можете использовать их по причинам совместимости.
Работа OpenGL предотвращает хранение списков отображения только в памяти графического процессора. Графический сервер (как его называет OpenGL) является чисто абстрактной вещью, и спецификация гарантирует, что то, что вы помещаете в списки отображения, всегда доступно. Однако в современных графических процессорах объем памяти ограничен, поэтому данные полезной нагрузки могут быть выгружены и выгружены при необходимости.
По сути, память GPU - это кэш для данных в системной памяти (так же, как системная память должна обрабатываться как кэш для хранения).
Более того, современные графические процессоры могут давать сбой, и драйверы будут выполнять полный сброс, создавая впечатление, что все работает нормально. Но после сброса все данные в памяти GPU должны быть повторно инициализированы.
Поэтому OpenGL необходимо хранить копии всех данных полезной нагрузки в памяти для обеспечения бесперебойной работы.
Следовательно, вполне нормально, чтобы ваши данные отображались как потребляющие системную память. Хотя весьма вероятно, что списки отображения также кэшируются в памяти графического процессора.
Списки отображения устарели. Вы можете использовать VBO с индексами вершин, чтобы использовать графическую память, и нарисовать его с glDrawElements
,