Подтвердить что ты не робот

Printf в GLSL?

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 4

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