printf в GLSL? - PullRequest
       12

printf в GLSL?

36 голосов
/ 06 августа 2010

В C, я могу отлаживать код, такой как:

fprintf(stderr, "blah: %f", some_var);

в GLSL ... есть ли у меня вообще возможность просто выбросить значение в шейдер Vertex или Fragment?Мне все равно, если это медленно;Я просто хочу сбросить стоимость.В идеале мне нужна настройка, подобная следующей:

  • нормальное состояние = нормально запустить шейдер GLSL
  • нажать клавишу 'd' = следующий кадр генерируется в ULTRA медленный режим, где «printfs» в шейдере Vertex / Fragment выполняются и выгружаются.

Возможно ли это?(Меня не волнует производительность; я просто хочу сделать это для одного кадра).

Спасибо!

Ответы [ 4 ]

23 голосов
/ 23 июня 2011

К сожалению, это невозможно напрямую. Тем не менее, одно из возможных решений, которое я часто использую (но я уверен, что это довольно распространено среди разработчиков GLSL), состоит в том, чтобы «печатать» значения в виде цветов вместо вашего конечного результата.

Конечно, это имеет много ограничений; Например, вы должны убедиться, что ваши значения отображаются в диапазоне (0,1.0). Функции как mod, fract и т. Д. Оказываются полезными в этих случаях. Но, в целом, это то, что я вижу как «printf» эквивалент в GLSL.

21 голосов
/ 06 августа 2010

Вместо того, чтобы печатать значения, вы задумывались о том, чтобы попробовать отладчик GLSL?

Например, glslDevil позволит вам пошагово выполнить выполнение вашего шейдера и проверять переменные на каждом этапе.1005 *

3 голосов
/ 23 июля 2013

Проверьте AMD CodeXL.Это позволит вам шаг за шагом просматривать значения состояния opengl, код шейдера и память текстур.

http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/

0 голосов
/ 14 января 2013

Вы можете просмотреть переменную, которую хотите проверить, скопировав ее значение в форму, а затем получить эту форму с помощью glGetUniformfv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...