Я делаю воксельный движок с OpenGL, и я столкнулся с чем-то, что я пытаюсь объяснить.
Я использовал 1 SSBO на блок в моем мире для хранения информации о блоках (Position, block_type).Каждый кусочек моего мира (около 16000 кусочков для мира среднего размера) хранит 4096 GLuint (4 uint8_t, упакованные как GLuint).Объем моей оперативной памяти составил 578 МБ, а виртуальной памяти - 480 МБ.
Я попытался использовать TBO (с фиксированным размером 4096 GLuint вместо масштабирования по необходимости) вместо SSBO, и я провел сравнение 2000 МБ для оперативной памяти и моей VRAM726MB.
Частота ядра GPU кажется (я не уверен в этом) более стабильной с TBO.
(тесты сделаны с программным обеспечением GPU-Z)
- Есть ли причина использовать TBO поверх SSBO?
Моя идея заключается в том, что я назначаю фиксированный размер для своих данных, когда использую TBO.С моим SSBO я делаю этот размер переменной.Должен ли я иметь большую оперативную память и VRAM все время, но стабильную, или более легкую RAM / VRAM, но нестабильную?
Кстати, я получаю много ошибок, когда использую SSBO (Buffer performance warning: Buffer object 13006 (bound to GL_SHADER_STORAGE_BUFFER, usage hint is GL_DYNAMIC_DRAW) is being copied/moved from VIDEO memory to SYSTEM HEAP memory.
)
Я также получаю это, когда пытаюсь изменить размер моего TBO размера / данных Buffer performance warning: Buffer object 200 (bound to GL_TEXTURE_BUFFER, usage hint is GL_DYNAMIC_DRAW) may be reconfiguredfor better performance. Recent usage of this buffer object has triggered a stall. The driver had to wait for one buffer object operation to complete before it could execute another.