2012-06-17 19 views
8

¿Cómo puedo habilitar una extensión en un sombreador Three.js?Habilitación de una extensión en un sombreador Three.js

Mi código hasta ahora:

conseguir extensión:

var domElement = document.createElement('canvas'); 
var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives'); 

en mi shader:

fragmentShader: [ 
    "#extension GL_OES_standard_derivatives : enable", 
    "code..." 
]... 

La salida de la consola:
ADVERTENCIA: 0:26: extensión 'GL_OES_standard_derivatives' no es compatible
ERROR: 0:32: 'dFdx': no ​​se ha encontrado ninguna función sobrecargada
ERROR: 0:32: '=': no ​​se puede convertir de 'const mediump float' a 'vector de flotación de 2 componentes'
ERROR: 0:33: 'dFdy': no ​​se ha encontrado la función sobrecargada
ERROR: doce y treinta y tres: '=': no ​​se puede convertir de 'const mediump flotar' a 'vector de 2 componentes de flotación'

Después de leer this issue on github, probé este ejemplo: de http://jsfiddle.net/VJca4/ consigo estos errores

ADVERTENCIA : 0:27: no se admite la extensión 'GL_OES_standard_derivatives'
ERROR: 0:30: '=': no ​​se puede convertir de 'const mediump float' a 'vec de 2 componentes tor of float '
ERROR: 0:31:' dFdx ': no ​​se ha encontrado ninguna función sobrecargada
ERROR: 0:31:' = ': no ​​se puede convertir de' const mediump float 'a' vector de flotación de 2 componentes '

+0

jsFiddle tenido vec2 desaparecidos y three.js era demasiado viejo - ver http: // jsFiddle .net/VJca4/9/funciona totalmente) – makc

Respuesta

6

También debe ser capaz de hacer esto:

renderer.context.getExtension('OES_standard_derivatives'); 
+0

¿Cómo pones esto en uso? Tengo un problema muy similar. – Hobbes

+0

También tengo este problema. Estoy llamando a 'renderer.context.getExtension ('GL_OES_standard_derivatives');' pero obtengo 'ERROR: 0: 114: 'GL_OES_standard_derivatives': la extensión está deshabilitada' cuando intento crear un' ShaderMaterial' desde mi código de sombreado. Si compilo el sombreador en webgl regular con '#extension GL_OES_standard_derivatives: enable' en la primera línea, funciona. – matth

+3

Parece que la forma de hacer esto en la base de código actual three.js es establecer 'derivatives = true' en' ShaderMaterial' en la creación. – matth

1

Encontrado el error. Usted tiene que utilizar el elemento DOM del procesador:

var gl = renderer.domElement.getContext('webgl') || 
      renderer.domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives');