Налагодження коду шейдера?


13

Я пишу ігровий движок, і коли я використовую перспективну камеру, я отримую чорний екран. Я не збираюся точно питати, чому це так, тому що було б багато коду для спільного використання, і, чесно кажучи, я думаю, що це трохи дріб'язкове питання, яке навіть вас усіх турбує.

Проблема в тому, що я не знаю, як це налагодити. Все, що змінюється, - це моя проекційна матриця, і якщо моя проекційна матриця виглядає добре, я не знаю, чому вона не працює. В ідеалі я б роздрукував значення різних речей, коли шейдер робив свої обчислення, але GLSL незручно не має функції printf ().

Отже, моє запитання: як налагодити свою проблему? Єдине, про що я можу придумати - перевірити стільки значень, скільки я можу на стороні клієнта, а потім програмувати за допомогою перестановки, але я цього не робив і нікуди не потрапив. Чи є спосіб я побачити, що відбувається у відеокарті? Чи існує зовсім інша техніка, яку я міг би використовувати?

Я використовую GLSL версії 420 (і функції, характерні для цієї версії), тому я не думаю, що glslDevil - це варіант, враховуючи, що він востаннє оновлений у 2010 році.

EDIT

Мені вдалося вирішити свою проблему через якусь непов’язану налагодження.

Відповіді:


2

Ви також можете використовувати таку програму, як glIntercept, яка схожа на PIX, але потім для OpenGL. Поряд із перехопленням та реєстрацією всіх дзвінків, ви також зможете відображати використання шейдерів та редагувати шейдери під час виконання. Цей останній варіант (редагування шейдерів під час виконання) може бути надзвичайно корисним при налагодженні, оскільки ви можете продовжувати редагування по частинах, поки щось не піде не так, і ви зможете швидко налагодити значення шляхом виведення кольору.

http://code.google.com/p/glintercept/


Це здається корисним. Я перевірю, чи працює він з GLSL 4.20 EDIT: з кількох причин я не думаю, що це спрацює. Він покладається на безліч характеристик OpenGL, які застаріли, і тому не в моєму шейдерному коді.
Аві

Ах занадто погано, я не знав, що це така стара. Але для GLSL4.2 має бути якийсь налагоджувач. Я розпитаю. Тим часом це може спрацювати? developer.nvidia.com/content/nvidia-shader-debugger#Features
Рой Т.

Працює лише для шейдерів Cg: |
Аві

4

Хоча я не впевнений, NVIDIA Nsight повинна мати можливість налагоджувати шейдери, принаймні, я думаю, що він підтримував GLSL у попередній версії (яку ви повинні мати змогу знайти). Він інтегрується в комплекті з Visual Studio, непростий, але має безліч корисних речей, але для старих версій для налагодження шейдерів через мережу вам знадобилося 2 машини з графічним процесором (хоча остання версія говорить, що це дозволяє "локальну" налагодження) . Також перевірте Shader Designer [2], який здається корисним IDE (але йому не вистачає налагодження GLSL).

[1] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-edition

[2] http://www.opengl.org/sdk/tools/ShaderDesigner/


Зауважте, що NSight вимагає дозволів адміністратора, щоб фактично налагоджувати шейдери.
starbeamrainbowlabs

1

На жаль, налагодження opengl непросте. Ось речі, які мені здалися корисними:

  • використовувати glGetError після кожного дзвінка
  • спробуйте використовувати нове розширення налагодження (ARB_debug _ ???)
  • використовуйте gDebugger, щоб побачити, що намальовано на екрані після кожного дзвінка
  • використовуйте apitrace, щоб побачити, що відбувається після кожної команди opengl
  • модифікуйте ваш шейдер для виведення різних кольорів на основі поточного вводу і спробуйте зрозуміти, чому він показує певний колір
  • вимкнути всі функції opengl, що обмежують можливості малювання: перевірка ножицями, тест на глибину, відсікання задньої поверхні тощо.

1
Це насправді не відповідає на моє запитання. Це корисно для налагодження викликів OpenGL на стороні клієнта, але не для налагодження програм шейдера. Я знаю, як налагодити дзвінки OpenGL на стороні клієнта.
Аві

1

Особисто я все ще використовую RenderMonkey. Однак це не зовсім підходить для цього точного питання, оскільки це лише фасад реального додатку і тому має деякі дивні обмеження. Це повністю не підтримує, але я просто не знайшов нічого кращого для налагодження GLSL.


Я не впевнений, що rendermonkey - це те, що я хочу тут, особливо, оскільки такі речі, як рух камери, покладаються на зміну gl_ModelViewProjectionMatrix, яку я не використовую.
Аві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.