2012-06-17 16 views
8

Come abilitare un'estensione su uno shader Three.js?Abilitazione di un'estensione su uno shader Three.js

Il mio codice finora:

ottenere estensione:

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

sul mio Shader:

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

L'output della console:
ATTENZIONE: 0:26: estensione 'GL_OES_standard_derivatives' non è supportato
ERRORE: 0:32: 'dFdx': nessuna funzione di sovraccarico corrispondente trovata
ERRORE: 0:32: '=': impossibile convertire da 'float mediump const' a '2-componente di vettore di float'
ERRORE: 0:33: 'dFdy': nessuna funzione sovraccaricata corrispondenza pensa
ERROR: 0:33: '=': impossibile convertire da 'float mediump const' a '2-componente di vettore di float'

Dopo aver letto this issue on github, ho provato questo esempio: da http://jsfiddle.net/VJca4/ ottengo questi errori

WARNING : 0:27: l'estensione 'GL_OES_standard_derivatives' non è supportata
ERRORE: 0:30: '=': impossibile convertire da 'const mediump float' a '2-component vec
ERRORE: 0:31: 'dFdx': nessuna funzione di sovraccarico corrispondente trovata
ERRORE: 0:31: '=': impossibile convertire da 'const mediump float' a 'Vettore a 2 componenti di float'

+0

jsfiddle avuto vec2 mancante, e Three.js era troppo vecchio - vedi http: // jsfiddle .net/VJca4/9/it totalmente funziona) – makc

risposta

6

si dovrebbe anche essere in grado di fare questo:

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

Come hai messo questo in uso? Ho un problema molto simile. – Hobbes

+0

Ho anche questo problema. Sto chiamando 'renderer.context.getExtension ('GL_OES_standard_derivatives');' ma ottengo 'ERRORE: 0: 114:' GL_OES_standard_derivatives ': extension is disabled' quando tento di creare un 'ShaderMaterial' dal mio codice shader. Se compilo lo shader in webgl regolare con '#extension GL_OES_standard_derivatives: enable' nella prima riga, funziona. – matth

+3

Sembra che il modo per fare ciò nell'attuale three.js codebase sia di impostare "derivatives = true" in "ShaderMaterial" durante la creazione. – matth

1

Trovato l'errore. Devi usare elemento DOM del renderer:

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