2016-03-15 3 views
2

Я не нашел окончательных ответов на этот вопрос, поэтому решил задать здесь. Не существует способа сохранить и загрузить скомпилированные webgl-шейдеры? Кажется пустой тратой, чтобы скомпилировать шейдеры каждый раз, когда кто-то загружает страницу, когда все, что вам нужно будет сделать, - скомпилировать шейдеры один раз, сохранить его в файл, а затем загрузить скомпилированный объект шейдера, как и HLSL (я знаю, что это не GLSL, но я все еще немного новичок в OpenGL).Сохранение/загрузка скомпилированных webgl-шейдеров

Так, если возможно, как я могу сохранить и загрузить скомпилированный шейдер в webgl?

ответ

2

Там действительно нет способа, и имхо это хорошая вещь. Это создавало бы проблему безопасности (подача произвольного байт-кода на GPU), в дополнение к тому, что при обновлении драйверов предварительно скомпилированные шейдеры потенциально пропускают новые оптимизации или просто ломаются.

, когда все, что вы должны сделать, это собрать шейдеры один раз, сохранить его в файл, а затем загрузить скомпилированный объект шейдера, как вы бы HLSL

OpenGL (и его производные) не поддержка загрузки предварительно скомпилированных шейдеры так же DirectX делает:

программы бинарные форматы не предназначены для передачи. Это не разумно ожидать, что разные производители аппаратных средств будут принимать одинаковые двоичные форматы. Это не разумно ожидать, что разные аппаратные средства от одного и того же поставщика будут принимать одинаковые двоичные форматы. https://www.opengl.org/wiki/Shader_Compilation#Binary_limitations

Там, кажется, нет никакого промежуточного формата, как Спир-V в OpenGL, так что вам нужно будет скомпилировать шейдер на целевой платформе вводящей целый ряд дополнительных проблем с пользователями, изменяя их графические карты/с использованием гибрида графическое решение, ограничения хранения на клиенте (5 МБ с использованием localstorage) и возможность злоупотреблять им, чтобы отпечатать аппаратное обеспечение.

+0

случайно удален последний комментарий. просто хотел сказать ваше право, вы не можете предварительно скомпилировать программы glsl, как вы можете hlsl (исходя из фона directx здесь). Я отредактировал свой вопрос, чтобы удалить заявление о дезинформации «как и в любой другой графической апи», – iedoc

Смежные вопросы