Как вы, ребята, отлаживаете GLSL?

Недавно я попытался написать немного кода шейдера GLSL, и мне не повезло, когда шейдер не отрисовал то, что я ожидал (в основном, все на экране было черным). Вот инструменты, которые я пробовал:

  1. Интеграция с Nvidia NSight VS - она ​​вылетает сразу же, когда я запускаю приложение, пытаюсь соединить другое приложение даже с простым рисованием треугольника, и все равно ничего не получается. Поищите в Интернете и на форуме Nvidia и выясните, что это обычная проблема, и, похоже, не удалось найти никакого решения.

  2. glslDevil - он может запустить приложение, но затем программа продолжает выход до того, как произойдет какой-либо рендеринг, GL Trace

    wglMakeCurrent(0, 0)
    wglDeleteContext(00010000)
    ChildProcess exited
    

    Получите еще один сбой при запуске другого приложения, когда после вызова glDeleteTexture (1, 0314EF74) Дочерний процесс завершился

    Я понятия не имею, что происходит.

  3. AMD PerfStudio 2 - кажется, это наиболее многообещающий инструмент, успешно запускающий мое приложение и отображающий необходимую информацию. Однако, похоже, не поддерживается отладка GLSL, я не могу пройти через шейдер и посмотреть локальные переменные и т. Д.? Вроде поддерживает только шейдер DirextX

  4. gDebugger - инструмент работает довольно хорошо, похож на AMD PerfStudio, но опять же, это не отладчик, он не может проходить через код шейдера и отслеживать любые локальные переменные.

  5. Printf - ?? Кто-то при переполнении стека говорит, что с помощью printf, как я могу выполнить printf () в шейдере?

  6. Преобразование шейдера DirectX в GLSL - поскольку шейдер DirectX имеет лучший инструмент отладки, и есть такие инструменты, как http://sourceforge.net/projects/hlsl2glsl/ для автоматического преобразования hlsl в glsl, кажется, это может быть альтернативой. Мне лично не понравилось это решение, и я очень хотел бы иметь другой выбор.

Может ли кто-нибудь подсказать, как вы отлаживаете свой GLSL? Какой инструмент вы успешно используете?

Я бегаю по:

  • NVidia GFX 460v2
  • Visual Studio 2008 и 2010
  • GLEW
  • OpenGL 2.0

person NachoChip    schedule 23.05.2014    source источник
comment
Неявно вы имеете ввиду под виндой?   -  person Tommy    schedule 24.05.2014
comment
проще просто написать их правильно с самого начала ... и использовать некоторые очевидные визуальные тесты, чтобы проверить, работают ли расчеты так, как они должны   -  person Display Name    schedule 24.05.2014
comment
я бы предложил исправить вашу установку NSight. Убедитесь, что у вас больше ничего не слушает порт, который слушает NSight (у меня была установлена ​​программа под названием freemake studio, которая заблокировала NSight). А еще лучше посмотрите лог-файл Nsight, чтобы выяснить, почему он разбился.   -  person PeterT    schedule 24.05.2014
comment
все на экране черное ... вы проверяли компиляцию шейдера / статусы ссылок / журналы? ARB_debug_output?   -  person genpfault    schedule 24.05.2014
comment
То же, что и genpfault. Прежде чем обвинять шейдер, я обычно проверяю, что openGL не выдает ошибку или даже предупреждение перед вызовом отрисовки. Затем вы можете указать пальцем на шейдер. И, как заметил Сардж Борщ, часто лучше писать шейдер шаг за шагом, а не сразу все, а затем приходится выяснять, какая часть вышла из строя.   -  person agrum    schedule 24.05.2014
comment
К сожалению, glslDevil не работает уже много лет. Если вам посчастливилось иметь достаточно старую кодовую базу / драйвер, он может сработать для вас, но, поскольку он не поддерживался, трудно найти идеальную комбинацию. Многие инструменты GL находятся в подобной ситуации, в том числе некоторые специфические для производителя. NSight поддерживается в разумных пределах до тех пор, пока вы не используете самую последнюю версию Visual Studio (она по-прежнему не поддерживает VS 2013).   -  person Andon M. Coleman    schedule 24.05.2014
comment
Да, я проверяю, чтобы в шейдере уже не было ошибок компиляции, и также использую gDeBugger для остановки при обнаружении любой ошибки opengl. Думаю, я могу потратить больше времени и пошагово изучить шейдер, чтобы выяснить, в чем проблема. Однако меня обескураживает отсутствие отладчика для glsl.   -  person NachoChip    schedule 24.05.2014
comment
Обычно я использую цвета для отладки кода шейдера. Он работает нормально для простой отладки, например, если какая-то переменная равна некоторому значению, установите вывод на красный цвет. Он примитивен, бутон неплохо работает. Конечно, важно реализовать возможность перекомпиляции шейдеров во время выполнения, это экономит много времени!   -  person Jaa-c    schedule 27.05.2014


Ответы (2)


Вы можете указать дополнительные выходные данные с помощью glDrawBuffers, а затем проверить это (ваш printf).

Однако это ничего не исправляет, когда примитив находится за пределами области рисования.

В противном случае это олдскульное программирование, основанное на чистых рассуждениях и мысленной отладке.

person ratchet freak    schedule 23.05.2014

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

  1. Загрузите NSight со страницы https://developer.nvidia.com/nsight-visual-studio-edition-downloads, и он включает в себя несколько этапов загрузки, просто следуйте инструкциям. Я установил Nsight Tegra раньше и получил меню NSight в моей Visual Studio, однако, когда я запускаю отладчик графики, приложение сразу вылетает. Я думаю, что интеграция NSight, поставляемая с NSight Terga, не работает, и переустановите NSight, следуя приведенной выше ссылке, похоже, решит проблему.

  2. При запуске графического отладчика NSight я не могу отлаживать свой шейдерный код из-за того, что мое приложение использует некоторую несовместимую функцию, например

    glTexImage2D() glTexEnvf()
    и многое другое. Отладчик графики сказал мне, что я могу вызвать инструмент под названием Nav.Launcher.exe, чтобы узнать список несовместимых функций в моем приложении. Однако я не могу найти инструмент на жестком диске.

  3. Затем я решаю использовать gDEBugger для повторного запуска моего приложения и включаю Breakpoints-> Break On Deprecated Function. Это позволяет мне знать все устаревшие функции, которые я вызвал в своем коде. После удаления всех устаревших функций функция отладчика кадров графического отладчика NSight может быть включена, и я наконец могу пошагово выполнять код шейдера построчно в Visual Studio.

Надеюсь на эту помощь.

person NachoChip    schedule 26.05.2014