Предотвращение автоматически встроенных функций webgl glsl? - PullRequest
0 голосов
/ 17 февраля 2019

В моем коде GLSL у меня есть большие функции, вызываемые несколько раз.

Например, внутри моей функции перлин-шума я запускаю хэш-функцию много раз.

float perlinNoise (...) {
    ...
    float x0y0z0 = pcgUnit3(seedminX,seedminY,seedminZ);
    float x0y0z1 = pcgUnit3(seedminX,seedminY,seedmaxZ);
    float x0y1z0 = pcgUnit3(seedminX,seedmaxY,seedminZ);
    float x0y1z1 = pcgUnit3(seedminX,seedmaxY,seedmaxZ);
    float x1y0z0 = pcgUnit3(seedmaxX,seedminY,seedminZ);
    float x1y0z1 = pcgUnit3(seedmaxX,seedminY,seedmaxZ);
    float x1y1z0 = pcgUnit3(seedmaxX,seedmaxY,seedminZ);
    float x1y1z1 = pcgUnit3(seedmaxX,seedmaxY,seedmaxZ);
    ...
}

InВ моем алгоритме процедурной генерации я вызываю функцию шума Perlin несколько раз.

Я замечаю, что каждый раз, когда я добавляю вызов функции шума Perlin, время компиляции для шейдеров занимает больше времени.Я думаю, что проблема в том, что glsl встроил вызовы функций, и, таким образом, код шейдера становится очень большим.

Правильно ли я по поводу встраивания, и если да, как я могу предотвратить это?

1 Ответ

0 голосов
/ 18 февраля 2019

На странице 13 GLSL_ES_Specification_1.00 описано, как установить прагматические дерективы

  • #pragma optimize (off)
  • #pragma debug(вкл)

Это был бы «встроенный» случай.«Я прав насчет врезки ..».Насколько мне известно, нет.Также не совсем уверен, что происходит на заднем плане.В Windows это переносится в ANGEL , возможно, взгляните на источник, который мог бы помочь.

В общем: попытайтесь снизить прецессию, считая, что три цифры 1.000 могут быть «хорошими».В любом случае Float может хранить только 5-6 цифр.Избегайте ветвления.Это должен быть ребенок первой помощи.

Некоторые инструменты отладчика в дикой природе (пожалуйста, сделайте свое собственное исследование)

Оптимизатор

...