WebGL и HTML-шейдерный тип

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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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