2010-12-03 14 views
6

Ist es möglich, von einer Textur in einem Vertex Shader mit WebGL zu lesen?WebGL: Textur Zugriff in einem Vertex-Shader?

Ich schrieb eine WebGL page (nur um es auszuprobieren) und verwendet Chrome 7, um es zu testen. Sobald ich auf Chrome 8 aufgerüstet habe, funktioniert es nicht mehr. Ich habe überprüft, dass Webgl aktiviert ist. Der Fehler ist:

‚Texture2D‘: keine passende überladene Funktion

gefunden

Als ich den Anruf zu Texture2D mit einem konstanten ersetzen, es funktioniert. Textur-Zugriff in einem Fragment-Shader mit der gleichen Textur funktioniert auch.

Wer hat irgendwelche Ideen? Ich bin besonders von der Tatsache betroffen, dass das Upgrade von Chrome dazu führte, dass es kaputtging.

Update: Es funktioniert in Firefox 4 Beta. Ich meldete einen Fehler mit Chrome - Ausgabe 65340

Update 2: Es funktioniert nun in Firefox und Chrome

+0

Ich denke, dass dies eine Einschränkung einiger Implementierungen sein könnte. – andrewmu

+0

Ich bezweifle, dass es beabsichtigt ist. Dies würde viele Techniken einschränken (z. B. Verschiebungsabbildung). – sharoz

Antwort

5

Es ist nicht wirklich ein 'Fehler' in Chrome.

Vertex Texture Access ist kein erforderliches Feature von Open GL ES 2, das die Basis der WebGL-Spezifikation ist. Ich vermute, was passieren könnte, ist, dass, obwohl Ihr zugrunde liegender GL-Treiber Vertex-Textur-Zugriff unterstützt, Sie nun zu Chrome mit Angle gewechselt haben und Angle diesen Vertex-Textur-Zugriff nicht als verfügbar meldet.

Sie können Ihre FF und Chrome-Versionen vergleichen mit Thatcher Ulrich

http://webgl-bench.appspot.com/

Dies ist der MAX_VERTEX_TEXTURE_IMAGE_UNITS Parameter (am Ende) Chrom/Winkel immer berichtet 0.t

Eine andere Sache zu hat Überprüfen Sie, ob Sie die richtige texture2D-Syntax verwenden - die Spezifikation wurde geändert und FF unterstützt möglicherweise noch die ältere Syntax.

+0

Diese Seite ist großartig. Vielen Dank. Es funktionierte tatsächlich in Chrome 7 (Ich versuchte Downgrade). Irgendeine Idee, warum sie das Feature fallen lassen würden? Gibt es einen Vorteil, die Fähigkeit der Hardware zu blockieren? – sharoz

+0

Wie einSelbst unten sagt, ist es nicht eine Frage des "Fallenlassens" eines Merkmals.Angle verwendet DX9, um Open GL ES 2.0 zu emulieren, und die Mindestanzahl der Vertextexturen für ES 2.0 ist 0. Wenn Sie den Nicht-Winkel-Renderer auswählen, wird die zugrunde liegende Open GL-Implementierung der Grafikkarten verwendet, die die Funktion möglicherweise unterstützt. Bitte beachten Sie, dass standardmäßig FF und Chrome Angle verwenden. Ich schlage vor, dass Sie sich das Angle-Projekt ansehen und vielleicht fragen, ob sie die Vertextextur unterstützen möchten. Siehe http://code.google.com/p/angleproject/ – alanatmech

+0

Danke. Ich habe auf deine und einSelbsts Kommentare unten geantwortet. – sharoz

2

Es würde gerne kommentieren, aber ich habe nicht den Ruf.

Wie Alanatmech sagte, könnte es mit Angle verwandt sein, der alle GL-Aufrufe an DirectX weiterleitet. Es ist also kein Feature-Droping und der Vorteil wäre, WebGL-Unterstützung auf Windows-Rechnern ohne OpenGL-Treiber zu haben.

Sie können versuchen, Chrome mit "--use-gl = desktop" auszuführen, daher wird das OpenGL-Rendering-Backend anstelle von Angle verwendet. Ihre Website funktioniert bei mir nicht mit der Betaversion von Chrome 8.0.552.215, aber es gibt nicht den Fehler, den Sie erwähnt haben, den ich auf Chrome 9.0.597.10 canary Build ohne die Flagge UND auf Minefield bekomme.

+0

Ich wusste nicht, dass es DX verwendet. Offenbar können ältere (oder eingeschränktere) Varianten von DX9 keine Vertextexturaufrufe machen (http://en.wikipedia.org/wiki/Shader_Model_3#Vertex_shader_comparison). Interessant ist, dass es in Firefox 4 funktioniert. Vielleicht verwenden sie verschiedene Versionen von Angle? Oder vielleicht leitet Firefox es durch opengl? – sharoz

+1

Nur Chrome verwendet Angle (im Moment). Firefox 4 (Beta 7) verwendet immer noch OpenGL. Meine Vermutung ist, dass es einfach nicht implementiert ist. –

+1

Seit dem 4. Dezember ist es (Angle/D3D) standardmäßig in den firefox nightlies für 32bit windows aktiviert und ich denke auch beta8pre. – einSelbst