WebGL и HTML-шейдеры - PullRequest
       58

WebGL и HTML-шейдеры

15 голосов
/ 05 ноября 2011

Я объявляю свою шейдерную программу GLSL ES в файле HTML, используя этот код:

<script id="shader-fs" type="x-shader/x-fragment">..shader-code..</script>

, как видно из обучающих примеров WebGL .Все работает нормально, но я не понимаю, почему я должен использовать атрибут type тега script.Я хочу знать, где указано значение "x-shader / x-фрагмент".Кто это делает ... W3C, Khronos Group или разработчики браузеров?Кто-нибудь может мне помочь?Спасибо тебе.

Ответы [ 2 ]

19 голосов
/ 08 ноября 2011

Нет официальной организации, которая указала бы, что код GLSL должен быть помещен в тег <script> типа "x-shader/x-fragment".

. Единственная причина, по которой код GLSL находится в этом теге <script>, заключается в том, чтоавтор учебника решил, что его код будет чище, если он поместит код GLSL в тег <script>, а не в обычную строку.

Однако, поскольку WebGL принимает код GLSL в качестве строкового значения, автору пришлось написать вспомогательную функцию с именем getShader(gl, id), чтобы получить тег сценария со страницы и преобразовать его в строку javascript перед передачей его вWebGL.

Причина, по которой автор выбрал значение типа "x-shader/x-fragment", заключается в том, что "x-shader/x-fragment" не является известным типом сценария браузером и, следовательно, будет безопасно игнорироваться браузером.

3 голосов
/ 05 ноября 2011

Идея состоит в том, что браузер не знает тип 'x-shader/x-fragment'. Ваш код будет работать нормально, если вы измените тип на что-то другое (например, 'foo').

Другими словами, не существует стандарта для хранения исходного кода шейдера. Но он понадобится вам как строка при компиляции шейдеров.

...