2010-02-26 3 views
1

OpenGL позволяет вам установить логическую бит-операцию (OR, XOR и т. Д.) Для выполнения при записи фрагмента в фреймбуфер.Есть ли эквивалент DirectX для glLogicOp OpenGL?

Я бы хотел выполнить быструю сцену вокселизации (как видно из статьи Эльмара Эйземана), где я использую один пиксель фреймбуфера для хранения 32 фрагментов. К сожалению, я работаю в среде DirectX 9. Если я что-то не упустил, D3D не поддерживает подобные бит-операции.

Первое, что пришло в голову, - аддитивное смешивание, но это приведет к неправильным результатам. Есть идеи?

+0

Фрагмент шейдера? –

+0

Фрагментные шейдеры не имеют возможности считывать данные из фреймбуфера (даже с SM 4.0) – prideout

ответ

1

Нет, не является эквивалентом в DirectX 9.

Вы можете эмулировать с помощью шейдеров, хотя. Но для этого потребуется Shader Model 4.0, поэтому DirectX 10 (я сделал это с использованием GS/PS и текстурных массивов). Я считаю, что DirectX 11 Compute Shaders будет иметь смысл, потому что реализация будет намного проще и эффективнее.

0

Большая проблема заключается в том, что DirectX настроен для обработки поплавков по конвейеру (вплоть до записи в текстуру). Что вы ожидаете от побитовой операции между двумя поплавками? Его маловероятно, что он будет делать то, что вы ожидаете.

В то время как карты могут поддерживать INT, эта функция «скрыта» от вас, так как работает DirectX. В результате вы не можете гарантировать, что определенная карта поддерживает его.

Что именно вы пытаетесь достичь? Возможно, вам удастся сделать то, что вам нужно.

Смежные вопросы