Как выполнить сдвиг разряда без (“<<” || “>>”) оператор эффективно?

Я работаю над программой построения теней OpenGL ES 2.0, и я плотно упаковал данные, например, три 5-разрядных целых числа без знака в блоке двух байтов. Для распаковки этих данных, мне, очевидно, нужно смещение бита, но это не поддерживается в OpenGL Язык Штриховки ES (см. страницу 29 http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf),

Следовательно, я выполняю много *2 и/2 операции для эмуляции разрядного смещения.

Кто-либо знает более эффективный/изящный способ сделать это? Существует ли прием, о котором я не знаю?

Спасибо!

11
задан Lars Schneider 12 August 2010 в 10:06
поделиться

2 ответа

Я никогда не использовал OpenGL, но наиболее эффективным методом будет 16-битная таблица поиска для каждого типа, если ваша среда поддерживает ее. Вам нужно будет заполнить таблицу один раз при запуске, но это должно быть очень быстро. Вы можете использовать отдельные таблицы для каждого типа или двухмерную таблицу, например, theTable [65536] [3].

1
ответ дан 3 December 2019 в 10:02
поделиться

Если вы выполняете несколько сдвигов, вы можете использовать силовые операции. Битовый сдвиг - это умножение или деление на 2n, и операция power будет более читабельной, чем несколько операций умножения или деления, я думаю, но я не уверен в производительности. Я полагаю, что это более элегантное решение, но, вероятно, не более эффективное.

5
ответ дан 3 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: