#iphone #opengl-es #vbo
#iPhone #opengl-es #vbo
Вопрос:
Мое приложение записывает все мои геометрические данные в VBO для повышения производительности, но мне нужно прочитать данные о вершинах во время выполнения программы для тестирования пересечения лучей треугольника. Я заметил, что есть функция, которая должна отображать местоположение данных VBO, glMapBufferOES, но, похоже, она поддерживает только GL_READ_ONLY. Кто-нибудь знает способ считывания данных VBO на iPhone после их привязки?
Комментарии:
1. Я никогда не видел такой функции. Было бы дорого прочитать VBO обратно, если он был загружен в память графического процессора и удален драйвером. Сколько у вас вершин?
2. 3 миллиона вершин, но они распространяются на 950 моделей. Проблема, с которой я сталкиваюсь, заключается в том, что если я загружаю свой VBO для повышения производительности, то у меня недостаточно оперативной памяти на iPhone и iPad, чтобы также сохранить вершины в локальном массиве. Единственный способ отобразить мой большой объект — это иметь только одну копию вершин. Если я не использую VBO, то скорость рендеринга неприемлема. Я использую идентификатор цвета, чтобы проводить тестирование ray triangle только на одной модели каждый раз, когда выполняется проверка, что случается лишь изредка.
3. Любая операция чтения в устройствах отложенной визуализации на основе плиток на устройствах iOS будет ужасно медленной, потому что она останавливает конвейер рендеринга (при этом вы можете снизить частоту кадров более чем на 20%).). Кроме того, не вызовете ли вы слишком большой скачок объема памяти, перезагрузив геометрию, пока VBO все еще присутствует на графическом процессоре?
4. Я предполагаю, что вершины не являются статическими, и вы не можете отобразить их в памяти. Так ли это?
5. Вершины статичны, мне не нужно изменять их во время выполнения, просто считайте значения обратно, чтобы я мог выполнить тестирование пересечения. Как бы я поступил с отображением вершин в памяти?
Ответ №1:
Сохраните имя файла, чтобы при необходимости загружать вершины из файла, выполнить тестирование, а затем снова очистить его. Это соответствует тому, что Apple рекомендует вам делать как можно больше, когда дело доходит до разработки для устройств iOS. Хранилище работает на удивление быстро.
Комментарии:
1. Рад слышать, что мы оба пришли к одному и тому же выводу. Это намного быстрее, чем я ожидал.
Ответ №2:
Я понял, как это сделать. Поскольку я не делаю это каждый кадр, я просто считываю вершины для выбранной мной модели обратно из файла, в котором я первоначально прочитал, выполняю тестирование пересечения лучей треугольника, затем снова очищаю массив вершин. На небольших моделях задержка незаметна. Для 1 миллиона полигонов существует задержка в полсекунды, что приемлемо для моих целей.