Ответ 1
Вместо того, чтобы печатать значения, подумали ли вы о попытке отладчика GLSL?
Например, glslDevil позволит вам выполнить ваше шейдерное выполнение и изучить переменные на каждом шаге.
В C я могу отлаживать код вроде:
fprintf(stderr, "blah: %f", some_var);
в GLSL... мне все равно, чтобы просто выгрузить значение в шейдере Vertex или Fragment? Меня не волнует, если он замедляется; Я просто хочу сбросить стоимость. В идеале, я хочу настроить следующие настройки:
Возможно ли это? (Я не забочусь о производительности, я просто хочу сделать это для одного кадра).
Спасибо!
Вместо того, чтобы печатать значения, подумали ли вы о попытке отладчика GLSL?
Например, glslDevil позволит вам выполнить ваше шейдерное выполнение и изучить переменные на каждом шаге.
К сожалению, это невозможно напрямую. Одно из возможных решений заключается в том, что в конечном итоге я использую много (но я уверен, что это довольно распространено среди разработчиков GLSL) - это "печатать" значения в виде цветов вместо вашего предполагаемого окончательного результата.
Конечно, это имеет множество ограничений; во-первых, вы должны убедиться, что ваши значения отображаются в диапазоне (0,1.0)
. Функции в качестве mod
, fract
и т.д. Полезны в этих случаях. Но, в общем, это то, что я вижу как эквивалент "printf" в GLSL.
Ознакомьтесь с кодом AMD CodeXL. Это позволит вам шаг за кадром, чтобы проверять значения состояния opengl, шейдерный код и текстурную память.
http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/
Вы можете увидеть переменную, которую вы хотите проверить, скопировав ее значение в форме, а затем получите эту форму с помощью glGetUniformfv