2016-09-09 14 views
0

Я пытаюсь записать данные в буфер в hlsl-шейдере. Я знаю, что в opengl вам нужен ssbo, но есть ли соответствующий тип буфера в direct11? (Я новичок в нем).direct11 записывать данные в буфер в пиксельном шейдере? (например, ssbo в открытом доступе)

p.s. Я использую monogame, поэтому новейшая модель шейдеров 3.0.

спасибо!

ответ

1

Shader Model 3 соответствует архитектуре DirectX 9. Эта архитектура выглядит следующим образом:

DX9 Pipeline

(Источник: https://msdn.microsoft.com/en-us/library/windows/desktop/bb219679(v=vs.85).aspx)

Как вы видите, есть только один выход из пиксельных шейдеров. Этот вывод может быть значением цвета или глубины и будет отображаться для цели рендеринга. Таким образом, в DX9 нет никакого способа.

В DX10 (SM) 4, трубопровод выглядит следующим образом:

DX10 pipeline

Источник: https://msdn.microsoft.com/en-us/library/windows/desktop/bb205123(v=vs.85).aspx

Опять же, выход пиксельного шейдера цветов и глубины. Ни в коем случае в DX10.

Наконец, DirectX 11 (SM 5):

DX11 pipeline

Источник: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476882(v=vs.85).aspx

Теперь есть способ от пиксельных шейдеров к памяти ресурсов. Тип буфера, который вам нужен, - RWBuffer.

+0

merci beaucoup, я предполагаю, что сначала нужно обработать текстуру, а затем обработать ее. – sunsflower