OpenGL VBO: короткая или плавающая? - PullRequest
1 голос
/ 15 января 2012

Мне нужно решить, использовать ли GL_UNSIGNED_SHORT или GL_FLOAT для моего (статического) VBO для вершин. Шорты используют в 2 раза меньше памяти, но также это уменьшает скорость рендеринга (потому что GPU должен преобразовывать их в плавающие)? То же самое для координат текстуры, я мог бы использовать GL_UNSIGNED_BYTE для меньших текстур и GL_UNSIGNED_SHORT для больших (используя матрицу текстур для отображения на 0-1), но я боюсь, что это может снизить скорость рендеринга.

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Для любого современного оборудования (с поддержкой DX10 или выше) можно предположить, что производительность чтения атрибутов всегда зависит от доступа к памяти, а не от преобразования целого числа в число с плавающей точкой. По сути это бесплатно .

Это в основном относится и к аппаратному обеспечению класса DX9, но некоторые аппаратные средства имеют определенные форматы вершин, с которыми оно не очень хорошо работает.

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

2 голосов
/ 15 января 2012

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

Но без реального тестирования это остается только диким предположением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...