AFrame - sampler3D во фрагментном шейдере - PullRequest
0 голосов
/ 06 июля 2019

Это webgl2 поддерживается aframe?Я пытаюсь использовать

precision mediump sampler3D 

во фрагментном шейдере, и я получил эту ошибку:

THREE.WebGLShader: gl.getShaderInfoLog() fragment ERROR: 0:106: 'sampler3D' : Illegal use of reserved word
ERROR: 0:106: 'sampler3D' : syntax error

Я прочитал по умолчанию Threejs поддерживает webgl1, и я должен добавить тег сценария в HTMLдля того, чтобы поддержать webgl2.

<script src="/path/to/WebGL.js"></script>

Кроме того, я попытался добавить версию шейдера в начало файла, но затем он говорит:

'version' : #version directive must occur before anything else, except for comments and white space

Есть ли способ сделать это в рамке?

1 Ответ

0 голосов
/ 07 июля 2019

ОК, я заставил это работать (по крайней мере, это веха).

Проблема в контексте webgl, с которым Aframe инициализирует сцену.По умолчанию это webgl, а не webgl2.Зарезервированное слово «sampler3D» доступно только в webgl2, и именно поэтому я получил ошибку.Мне пришлось клонировать репозиторий aframe, в файле src \ core \ scene \ a-scene.js изменить метод setupCanvas и добавить поддержку webgl2:

canvasEl = document.createElement('canvas');
var contextEl = canvasEl.getContext( 'webgl2' );
sceneEl.context = contextEl;

, а в метод setupRenderer () добавитьсвойство:

context: this.context,

для карты rendererConfig.

Это заставило запустить мою строку "precision mediump sampler3D" на моих шейдерах.

...