![]() |
|
||||||||||
|
|||||
|
Вот произвел ты какие-то действия, например, в вершинной программе:
"mov vt5.zw, vc0.zw\n" + "mul vt0.xy, vt5.zw, vc0.zw\n" + "add vt0.w, vt0.x, vt0.y\n" + "sqt vt0.w, vt0.w\n" + "div vt0.xy, vc0.zw, vt0.ww\n" + Может кто знает какие-то ide или способы для дебага шейдерных программ, их же не возможно писать, не зная что там в итоге получается.
__________________
Дети не должны знать о своих родителях |
|
|||||
|
скаут
__________________
местонахождение |
|
|||||
|
Цитата:
__________________
Дети не должны знать о своих родителях |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Дебажить шейдеры невозможно никакие ни агал ни другие, если ты имеешь в виду трассировку. В скауте можно вроде только посмотреть результат работы.
Ошибки можно вывести в оутпут: context3D.enableErrorChecking = true;. Последний раз редактировалось Sintesis; 18.03.2013 в 15:45. |
|
|||||
|
И все же, трассировать шейдеры возможно.
Утилита PIX из Microsoft DirectX SDK для Windows. В ней можно сделать захват программы и затем детально рассмотреть лог её выполнения, вместе со всеми шейдерными вычислениями. Вот посмотрите, как на каждой строчке выполнения флешовой вершинной программы, можно посмотреть все текущие значения в регистрах: Просто невероятно, то что надо! Раздизассемблированный код шейдера немного отличается от первоначального вида, но разобраться можно. Вот вводная статья по PIX Тулзу качать здесь. После установки, она появиться в папке utils с именем PIX for Windows.exe СлаваRa, В скауте можно так-же дебажить шейдеры?
__________________
Дети не должны знать о своих родителях |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
О круто, а мне доказывали, что нельзя(. Хотя полезно-ли такое дело, ну может быть в какой-то мере да... Шейдер повторяется для каждой вершины, действует очень быстро, у каждой вершины будет свой результат и это всё за доли секунды, и что там можно будет увидеть в миллионах векторов...
Добавлено через 12 минут лучше не заморачивайся, пиши шейдеры в RenderMonkey на HLSL(или просто найди любой шейдер в нете и открой в рендерманки), тамже превращай их в D3DAssembler(это делается одной кнопкой), выучи этот ассемблер на сайте майкрасофта про него всё есть и переписывай его в AGAL, это не сложно, AGAL и D3DAssembler очень похожи. То, что сверху в твоём скрине и есть d3dAssembler. Отличается от AGAL не сильно: ввод и вывод параматров немного по другому, буквы переменных, констант и остального - другие, например "r" в d3d это "v" в агале. Больше нет отличий серьёзных. Только в d3d есть циклы в агале нет( и ещё в d3d есть по моему 3 инструкции которых нет в agal, но их можно имитировать, они всего лишь совокупность нескольких инструкций в одной. Отлично то, что для d3dassembler есть программы в которых удобно разрабатывать шейдеры, в рендерманки есть даже режим художника в котором не нужно знать языки шейдеров, чтоб сделать шейдер. Последний раз редактировалось Sintesis; 18.03.2013 в 19:33. |
|
|||||
|
В программе сохраняется лог для каждого кадра. Можно спокойно и не спеша, поэтапно проанализировать рендер любого кадра, любого меша, любого пиксела.
Sintesis, Спасибо, наверное, я так и сделаю.
__________________
Дети не должны знать о своих родителях |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Капец, если такой трейс сделать для пиксельного шейдера, то этот шейдер повторится 60 раз в секунду для каждого пикселя, а пикселов миллионы, в секунду будут миллионы записей в лог, миллионы векторов, за несколько секунд такой лог будет размером несколько гигабайт.
|
|
|||||
|
Sintesis,
Воспользовался твоим советом, скачал RenderMonkey, писать на высокоуровневом HLSL в 500 раз удобнее. И уроков полно, всё не нарадуюсь. Программа невероятно классная, ещё бы компилятор, чтоб прямиком в AGAL и совсем бы как в сказке было ![]()
__________________
Дети не должны знать о своих родителях |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|