2016-05-31 5 views
1

Я пытаюсь отобразить 3D-медицинские данные в браузере с помощью WebGL 2.0.Синтаксическая ошибка, встречающаяся в WebGL 2.0 GLSL при использовании sampler3D

Текстуры AFAIK 3D теперь поддерживаются в WebGL 2.0.

texImage3D() - признанный вызов функции.

Я пишу фрагмент шейдер и объявить единообразный пробник:

uniform sampler3D samp; 

Когда я запустить его на Firefox, я получаю сообщение об ошибке:

uncaught exception: Shader compile error: ERROR: 0:19: 'sampler3D' : Illegal use of reserved word ERROR: 0:19: 'sampler3D' : syntax error

прекрасно работает, когда я использую sampler2D (не решает мою цель, хотя).

Может ли кто-нибудь, пожалуйста, указать мне, что я делаю неправильно здесь?

Является ли sampler3D еще не подтвержденным? Но в таком случае как любая текстура, загружаемая с использованием texImage3D(), должна быть доступна?

ответ

4

Вы изменили все, что вам нужно изменить, чтобы использовать функции WebGL 2.0, такие как sampler3D?

Для использования sampler3D вам нужно добавить

#version 300 es 

В верхней части затенения. ОН ДОЛЖЕН БЫТЬ ПЕРВОЙ ЛИНИИ БЕЗ WHITESPACE ПЕРЕД

Примечание Есть много других изменений в GLSL 3.00 из GLSL 1.0

тестирования здесь

"use strict"; 
 

 
const vs = `#version 300 es 
 

 
in vec4 position; 
 

 
void main() { 
 
    gl_Position = position; 
 
} 
 
`; 
 

 
const fs = `#version 300 es 
 
precision mediump float; 
 
precision lowp sampler3D; 
 

 
uniform sampler3D u_someTexture; 
 

 
out vec4 theColor; 
 

 
void main() { 
 
    theColor = texture(u_someTexture, vec3(0,0,0)); 
 
} 
 
`; 
 

 
function main() { 
 
    var m4 = twgl.m4; 
 
    var gl = twgl.getContext(document.createElement("canvas")); 
 
    log("using: " + gl.getParameter(gl.VERSION)); 
 
    if (!twgl.isWebGL2(gl)) { 
 
    log("Sorry, this example requires WebGL 2.0"); 
 
    return; 
 
    } 
 

 
    var programInfo = twgl.createProgramInfo(gl, [vs, fs], (err) => { 
 
    log("could not compile shader: " + err); 
 
    }); 
 
    if (programInfo) { 
 
    log("compiled shader with sampler3D"); 
 
    } 
 

 
} 
 
main(); 
 

 
function log() { 
 
    var elem = document.createElement("pre"); 
 
    elem.appendChild(document.createTextNode(Array.prototype.join.call(arguments, " "))); 
 
    document.body.appendChild(elem); 
 
}
<script src="https://twgljs.org/dist/twgl-full.min.js"></script>

+0

Да. Недопустимая строка объявления версии GLSL. Спасибо. – jezerien

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