Я работаю над программой построения теней OpenGL ES 2.0, и я плотно упаковал данные, например, три 5-разрядных целых числа без знака в блоке двух байтов. Для распаковки этих данных, мне, очевидно, нужно смещение бита, но это не поддерживается в OpenGL Язык Штриховки ES (см. страницу 29 http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf),
Следовательно, я выполняю много *2 и/2 операции для эмуляции разрядного смещения.
Кто-либо знает более эффективный/изящный способ сделать это? Существует ли прием, о котором я не знаю?
Спасибо!
Я никогда не использовал OpenGL, но наиболее эффективным методом будет 16-битная таблица поиска для каждого типа, если ваша среда поддерживает ее. Вам нужно будет заполнить таблицу один раз при запуске, но это должно быть очень быстро. Вы можете использовать отдельные таблицы для каждого типа или двухмерную таблицу, например, theTable [65536] [3].
Если вы выполняете несколько сдвигов, вы можете использовать силовые операции. Битовый сдвиг - это умножение или деление на 2n, и операция power будет более читабельной, чем несколько операций умножения или деления, я думаю, но я не уверен в производительности. Я полагаю, что это более элегантное решение, но, вероятно, не более эффективное.