2012-06-17 8 views
8

Wie kann ich eine Erweiterung für einen Three.js-Shader aktivieren?Aktivieren einer Erweiterung für einen Three.js-Shader

Mein Code so weit:

bekommen Erweiterung:

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

auf meinem Shader:

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

Die Konsolenausgabe:
ACHTUNG: 0.26: Erweiterung 'GL_OES_standard_derivatives' wird nicht unterstützt
FEHLER: 0:32: 'dFdx': keine übereinstimmende überladene Funktion gefunden
FEHLER: 0:32: '=': Konvertierung von 'const mediump float' in '2-Komponentenvektor von float'
FEHLER: 0:33: 'dFdy': keine passende überladene Funktion gefunden
FEHLER: 00.33: '=': kann nicht von 'const mediump float' auf '2-Komponenten-Vektor des Schwimmers'

nach der Lektüre this issue on github zu konvertieren, habe ich versucht, dieses Beispiel: von http://jsfiddle.net/VJca4/ ich diese Fehler

WARNUNG erhalten : 0:27: Erweiterung 'GL_OES_standard_derivatives' wird nicht unterstützt
FEHLER: 0:30: '=': Konvertierung von 'const mediump float' in '2-Komponenten-Vec nicht möglich tor of float FEHLER: 0:31: 'dFdx': keine passende überladene Funktion gefunden
FEHLER: 0:31: '=': Konversion von 'const mediump float' zu '2-Komponentenvektor float' nicht möglich

+0

jsfiddle vec2 fehlt, und three.js war zu alt - siehe http: // jsfiddle .net/VJca4/9/es funktioniert völlig) – makc

Antwort

6

Sie sollten auch in der Lage sein, dies zu tun: hatte

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

Wie hast du das in Gebrauch genommen? Ich habe ein sehr ähnliches Problem. – Hobbes

+0

Ich habe auch dieses Problem. Ich rufe 'renderer.context.getExtension ('GL_OES_standard_derivatives');' aber ich bekomme 'ERROR: 0: 114: 'GL_OES_standard_derivatives': Erweiterung ist deaktiviert, wenn ich versuche,' ShaderMaterial' aus meinem Shader-Code zu erzeugen. Wenn ich den Shader in regulärem Webgl mit '#extension GL_OES_standard_derivatives: enable' in der ersten Zeile kompiliere, funktioniert es. – matth

+3

Es scheint der Weg, dies in der aktuellen three.js Codebasis zu tun, ist 'derivatives = true' im' ShaderMaterial' bei der Erstellung zu setzen. – matth

1

Fehler gefunden. Sie haben auf den DOM-Element des Renderers verwenden:

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