Я разработчик настольных систем, и я начинаю изучать мир мобильных устройств.
Чтобы избежать недоразумений или приветственных, но тривиальных ответов, я могу смиренно сказать, что я хорошо осведомлен о механизмах GL и GL | ES.
Короткий вопрос: если мы используем GL | ES 2.0 в архитектуре с общей памятью, какой смысл использовать VBO в отношении массивов на стороне клиента?
Подробнее:
-
Буферы Vertex - это сырые фрагменты памяти, драйвер никоим образом не может оптимизировать что-либо, потому что шаблон доступа зависит от: 1) того, как приложение настраивает макет вершинных данных, 2) как вершинный шейдер потребляет содержимое буфера и 3) у нас может быть множество вершинных шейдеров, работающих по-разному, и по-разному подбирать один и тот же буфер.
-
Выравнивание: отдельное хранилище VBO может начинаться с адресов, которые оптимальны для базовой системы GL; что, если я просто заставляю (например, уважать оптимальные методы выравнивания) распределений на стороне клиента на эти границы?
-
Архитектуры на основе плитки на основе рендеринга или немедленного режима не должны вступать в игру: по моему мнению, это не связано с моим вопросом (т.е. доступом к памяти).
Я понимаю, что использование VBOs может привести к тому, что ваш код будет работать быстрее/быстрее в будущих платформах/аппаратных средствах без его модификации, но это не в центре внимания этого вопроса.
Кроме того, я также понимаю, что использование VBO в архитектуре общей памяти удваивает использование памяти (если вам по какой-то причине нужно хранить данные вершин в вашем распоряжении), и это стоит вам memcpy данных.
Как и в чередующихся массивах вершин, использование VBO имеет отличную "шумиху" в форумах разработчиков /blogs/official _technotes без каких-либо данных, поддерживающих эти утверждения (т.е. эталонные тесты).
- Возможно ли использование VBO на архитектурах разделяемой памяти?
- Работают ли серверы на стороне клиента?
- Что вы думаете/знаете об этом?