Shaders

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Shaders

Сообщение lellel » 25.10.2009 (Вс) 2:36

занялся наконец шейдерами..
решил сначала прикрутить что нить к проекту, начал с пиксельного..
сделал так
Код: Выделить всё
Dim pCode As D3DXBuffer, s As String
Dim VSArray() As Long, VSSize As Long

  s = "ps.1.0 " & _
  "tex t0 " & _
  "mov r0,t0"
   
        Set pCode = d3dx.AssembleShader(s, 0, Nothing)
       
        VSSize = pCode.GetBufferSize() / 4
       
        ReDim VSArray(VSSize - 1)
       
        Call d3dx.BufferGetData(pCode, 0, 4, VSSize, VSArray(0))
       
        VS = d3dDevice.CreatePixelShader(VSArray(0))
       
        Set pCode = Nothing


рисовал так
Код: Выделить всё
  d3dDevice.SetTexture 0, Tex12
 
  d3dDevice.SetStreamSource 0&, vBufPort, vSizePort
  d3dDevice.SetPixelShader VS
   
  d3dDevice.SetVertexShader vFlagPort
  d3dDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 2


все отрисовалось, как будто я и не использовал шейдеры.. но я так понял шейдер который я использовал как раз просто натягивает текстуру..
возникло несколько вопросов.. я пока все правильно сделал?
а что такое .SetVertexShaderConstant ?
и последний.. кто нить может посоветовать литературу по асмовским шейдерам?)

добавлено позднее:
у кого нибудь работает пример из SDK с пиксельными шейдерами?)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Shaders

Сообщение FireFenix » 25.10.2009 (Вс) 13:07

Код: Выделить всё
все отрисовалось, как будто я и не использовал шейдеры.. но я так понял шейдер который я использовал как раз просто натягивает текстуру..

тадамс... стандартный шейдер
Код: Выделить всё
а что такое .SetVertexShaderConstant ?

Думаю в ХНА это передача в шейдер переменных в виде констант... Аналог ID3DXConstantTable::Set[Int, Bool, Float, etc]
Код: Выделить всё
добавлено позднее:
у кого нибудь работает пример из SDK с пиксельными шейдерами?)

Все примеры DX с 9 по 11 работают у мну
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 25.10.2009 (Вс) 14:26

.SetVertexShaderConstant вопрос наверное зря задал, потому что по названию понятно что передача констант в шейдер..
но все равно спс))
на GameDev наверное есть статьи которые помогут мне научиться писать шейдеры..

а можно включи в проект шейдер на HLSL а не на Asm? как?)

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Shaders

Сообщение FireFenix » 25.10.2009 (Вс) 15:18

lellel писал(а):.SetVertexShaderConstant вопрос наверное зря задал, потому что по названию понятно что передача констант в шейдер..
но все равно спс))
на GameDev наверное есть статьи которые помогут мне научиться писать шейдеры..

Вырезка из мануала:
Код: Выделить всё
Initializing Shader Constants

Shader constants are contained in the constant table. This can be accessed with the ID3DXConstantTable interface. Global shader variables can be initialized in shader code. These are initialized at run time by calling SetDefaults.


а можно включи в проект шейдер на HLSL а не на Asm? как?)

D3DXCreateEffectFromFile

Вырезка из мануала:
Код: Выделить всё
An application passes an HLSL shader to D3DX using D3DXCompileShader and gets back a binary representation of the compiled shader which in turn is passed to Microsoft Direct3D using CreatePixelShader or CreateVertexShader.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 25.10.2009 (Вс) 17:19

не нашел такой функции в DX8 SDK..

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Shaders

Сообщение FireFenix » 25.10.2009 (Вс) 17:51

lellel писал(а):не нашел такой функции в DX8 SDK..

Ты же не указал версию, я думал ты по последнему SDK ориентируешься =)
HLSL включён в DX9.0 и выше и вроде в DX8 его нету, но можно отдельно откомпилировать к примеру прогой из проекта Mikle
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 25.10.2009 (Вс) 18:12

сори, не подумал))
прогу видел, потом AssembleShaderFromFile подгрузить?]

Добавлено позднее
Set pCode = d3dx.AssembleShaderFromFile(App.Path & "\test.vsh", 0, s, Nothing)
так не работает..

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 25.10.2009 (Вс) 20:46

Пример из SDK идёт только там, где установлено SDK в Debug режиме. Замени в примере девайс "ref" на "hal", и пойдёт.
Шейдер действительно можно скомпилить заранее и подгрузить, но как поведёт себя Device8, если подсунуть ему PS_2_0 или выше... не представляю.
Константы являются константами для шейдера - он их может только читать.
Куда попадают матрицы после SetTransform? В константы вертексного шейдера.
Куда попадает TFACTOR после соответствующего SetRenderState? Уже понятно?
Точно говоря это не совсем так, TFACTOR ты не найдёшь среди констант шейдера, просто потому, что при использовании шейдера этот рендерстейт выключается, но это тоже константа.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 25.10.2009 (Вс) 22:12

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

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Shaders

Сообщение FireFenix » 25.10.2009 (Вс) 22:23

lellel писал(а):есть ссылочка на какую нибудь информацию по написанию шейдеров на асм?
покопался сегодня в сети, нашел кое что по вертексным, а пиксельный в той статье уже на ARB_fragment_program рассматриваются.. не знаю что это, код немного похож на асм..

видел в книгах Wolfgang F. Engel. У него там целая линейка книг
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 25.10.2009 (Вс) 22:29

спс) поищу книжки)

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 26.10.2009 (Пн) 20:14

ps.1.4 будет работать?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 26.10.2009 (Пн) 20:26

lellel писал(а):ps.1.4 будет работать?

Будет.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 26.10.2009 (Пн) 20:31

а что-то более узконаправленное(чем ShaderX) на асмовские шейдеры кто нибудь знает?
не настолько свободно владею английским чтобы читать книги такого объема..

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 27.10.2009 (Вт) 11:22

lellel писал(а):а что-то более узконаправленное(чем ShaderX) на асмовские шейдеры кто нибудь знает?

Банально, но DX SDK. Ничего там сложного нет.
Но лучше сразу начинай с PS_2_0, там пересмотрен синтаксис, всё стало понятнее и проще, хотя и мощнее. А PS_1_4 - вообще тупиковая ветвь.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 27.10.2009 (Вт) 14:50

а PS_2_0 под DX8 пойдет?
вообще, до какой версии шейдеры можно без проблем использовать под DX8? (пиксельные и вертексные)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 27.10.2009 (Вт) 17:58

Пиксельные до 1_4, вертексные до 1_1. Переходи на DX9.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 27.10.2009 (Вт) 18:57

очень может быть.. спасибо)
да и пора бы за С++ взяться)

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 30.10.2009 (Пт) 19:27

все же решил попробовать сначала vs.1.1
пытаюсь прикрутить такой шейдер:
Код: Выделить всё
vs.1.1

dcl_position   v0
dcl_texcoord   v1

mov  r0, v0       
mov  r0.w, c0.z
mov  r0.z, c0.x
mov  oPos, r0

mov  oT0, v1

mov  r0.xy, c1

mov  r1, v1
mad  r1.y, c5.x, r0.y, r1.y

mov  r2, v1                 
mad  r2.y, c5.y, r0.y, r2.y

mov  r3, v1
mad  r3.y, c5.z, r0.y, r3.y

mov  oT1, r1
mov  oT2, r2
mov  oT3, r3


но не получается..
вродже писали что можно прикрутить откомпиленный шейдер (например утилиткой Mikle)
а как?
а шейдеры пиксельные 1_4, вертексные 1_1 в таком случае норм должны работать?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 30.10.2009 (Пт) 19:40

У меня в файле содержится то, что у тебя в pCode после d3dx.AssembleShader, загружай с этого момента.
Последний раз редактировалось Mikle 30.10.2009 (Пт) 19:54, всего редактировалось 1 раз.

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Shaders

Сообщение lellel » 30.10.2009 (Пт) 19:45

Код: Выделить всё
  Set VShaderCode = d3dx.AssembleShader(s, 0, Nothing)
  VSSize = VShaderCode.GetBufferSize \ 4
  ReDim VSArray(VSSize - 1)
  d3dx.BufferGetData VShaderCode, 0, 4, VSSize, VSArray(0)
  d3dDevice.CreateVertexShader vsDecl(0), VSArray(0), m_Shader, 0


то есть надо загрузить содержимое файла в VShaderCode?

Добавлено позднее:
немного оффтоп..
а огонь обычно создается при помощи шейдеров? (этот шейдер, что я пытаюсь загрузить, вертексный шейдер из примера огня в ReaderMonkey)
Последний раз редактировалось lellel 31.10.2009 (Сб) 16:09, всего редактировалось 1 раз.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Shaders

Сообщение Mikle » 30.10.2009 (Пт) 20:31

Огонь,самый простой:
viewtopic.php?f=6&t=23846


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList