Servo: WebGL 1.0 vollständig implementieren

Erstellt am 26. März 2016  ·  40Kommentare  ·  Quelle: servo/servo

Dies soll ein Meta-Bug sein.

Einige der verbleibenden Methoden sind auf https://github.com/servo/servo/issues/5014 blockiert (diejenigen, die ArrayBufferView oder BufferDataSource und Überschreibungen haben), aber einige andere können es sein ohne Probleme umgesetzt.

Ich werde versuchen, für jeden verbleibenden Mangel individuelle Probleme einzureichen, da einige davon E-Easy .

Allgemeine Informationen zu WebGL-Fehlern

Zum erweitern klicken

Spez

Die WebGL 1.0-Spezifikation ist da .

GLES 2.0-Spezifikation

WebGL basiert auf der GLES 2.0-Spezifikation, daher nutzt die WebGL-Spezifikation oft Details dazu. Eine PDF-Version finden Sie hier .

Aktueller Code

DOM

Die DOM-Seite des WebGL-Codes finden Sie in den folgenden Dateien:

  • components/script/dom/webglrenderingcontext.rs
  • components/script/dom/webglactiveinfo.rs
  • components/script/dom/webglbuffer.rs
  • components/script/dom/webglcontextevent.rs
  • components/script/dom/webglframebuffer.rs
  • components/script/dom/webglobject.rs
  • components/script/dom/webglprogram.rs
  • components/script/dom/webglrenderbuffer.rs
  • components/script/dom/webglrenderingcontext.rs
  • components/script/dom/webglshader.rs
  • components/script/dom/webglshaderprecisionformat.rs
  • components/script/dom/webgltexture.rs
  • components/script/dom/webgluniformlocation.rs

WebGL-Thread

Der WebGL-Thread ist der Thread, der die WebGL-Nachrichten vom DOM empfängt und entweder ausführt oder an das WebRender-Back-End sendet.

Sie müssen hier wahrscheinlich nichts anfassen, aber falls Sie einen Blick darauf werfen möchten, ist die Datei:

  • components/canvas/webgl_paint_thread.rs

WebGL-Befehlsdefinition, -ausführung und andere Typen

Der Rest der WebGL-Definitionen und die Befehlsimplementierungen befinden sich in der webrender_traits webgl.rs Datei von , um von Servo und WebRender gemeinsam genutzt zu werden.

Sehen Sie sich die Definition von WebGLCommand und die Funktion apply .

Um aktiv damit zu arbeiten, verwenden Sie am besten einen Cargo-Override .

Beachten Sie, dass WebGLCommand aus Legacy-Gründen von canvas_traits als CanvasWebGLMessage re-exportiert wird (um zusätzlichen Rebase-Schmerz zu vermeiden, während Webrender noch nicht zusammengeführt wurde).

Fehlende Sicherheitskontrollen

  • [ ] Implementieren Sie "Enabled Vertex Attributes and Range Checking" richtig (#20599)
  • [ ] Überprüfen Sie, ob wir alle GLSL-Einschränkungen richtig implementieren (#20601)
  • [ ] "Vollständigkeit der Cube-Map-Framebuffer-Anhänge" richtig implementieren (#20654)
  • [ ] Implementieren von WebGL-Prüfungen gegen Feedbackschleifen (#21288)
  • [ ] Schablonenprüfungen richtig implementieren (#20555)
  • [ ] Texturen in einigen Fällen auf transparentes Schwarz initialisieren (#21716)
  • [ ] Überprüfen Sie die Quelle, die an gl.shaderSource() (#21754)

Ausstehende Implementierungen

  • [ ] Unterstützung der WebGL-Kontextoption von antialiasing (#21285)
  • [ ] Unterstützt das Verwerfen und Neuerstellen von WebGL-Kontexten (#15266)
  • [ ] Komprimierte Texturen in WebGL implementieren (#20594)
  • [ ] Implementieren des Zeichnens einer WebGL-Leinwand in eine 2D-Leinwand (#21556)
  • [ ] Implementieren von ImageBitmap (#20650)
  • [ ] Erstellen Sie bei Bedarf einen kleineren als angeforderten Zeichenpuffer (#21718)
  • [ ] WebGL-Canvas wird im Vollbildmodus skaliert (#21290)
  • [ ] Korrekte Verteidigung gegen Überläufe in WebGLRenderingContext.bufferSubData (#20558)

Andere ausstehende Dinge und Verbesserungen

  • [ ] Firefox-Wissen über WebGL-Kontextrobustheit stehlen (#21144)
  • [ ] Unterstützt das erweiterte WebIDL-Attribut [AllowShared] (#20515)
  • [ ] drawingBufferWidth / drawingBufferHeight in WebGLRenderingContext (#20530)
  • [ ] Cache-Ergebnis von WebGLRenderingContext.getContextAttributes (#20532)
  • [ ] Nicht umsonst einen leeren Puffer in WebGLRenderingContext.bufferData zuweisen (#20557)
  • [ ] Umleitungen für WebGL-Texturparameter entfernen (#20596)
  • [ ] Bereinigen Sie die Infrastruktur der WebGL-Erweiterung (#20642)
  • [ ] Vielleicht eine neue Aufgabenquelle speziell für WebGL einführen (#20643)
  • [ ] Khronos-Tests für WebGL sollten keinen Index im Testnamen verwenden (#20668)
  • [ ] [Throws] gilt nicht pro Überladung (#20516)
  • [ ] Absturz beim Laden des Shaders auf html5test.com (#21191)
  • [ ] WebGL-Wasserdemo zeigt nichts an (#21173)
  • [ ] Firefox meldet größere Grenzwerte für "max. variierende Vektoren", "max. Farbpuffer" und "max. kombinierte Textureinheiten" als Servo (#21172)
  • [ ] Echte webgl-basierte Apps untersuchen (#21151)
  • [ ] Erstellen Sie einen WebGL-Profiler (#21150)

Fertiges Zeug

  • [x] Auf ungültige Zeichen in WebGL-Speicherort und Attributnamen prüfen (#21287)
  • [x] Überprüfe das Verhalten von WebGLRenderingContext.getProgramInfoLog (#20561)
  • [x] handle_object_deletion kann falsch sein (#21352)
  • [x] Löschen Sie den Framebuffer beim Initialisieren und Ändern der Größe des WebGL-Canvas (#21475)
  • [x] Unterstützen Sie Unions als unterscheidenden WebIDL-Parameter (#20513)
  • [x] Implementieren Sie die ausstehende texImage2D-Überladung (#10443)
  • [x] Implementieren von copyTexImage2D (#11147)
  • [x] Implementieren von copyTexSubImage2D (#11147)
  • [x] detachShader implementieren (#10215)
  • [x] Geräteende (#10212, #10215)
  • [x] Flush implementieren (#10213, #10215)
  • [x] Implementieren von FramebufferRenderbuffer (#13639)
  • [x] Implementieren von FramebufferTexture2D (#13639)
  • [x] Implementieren Sie generateMipmap (#10215)
  • [x] Implementiere getActiveAttrib (#10379)
  • [x] Implementiere getActiveUniform (#10397)
  • [x] Implementieren von getAttachedShaders (#20411)
  • [x] Implementiere getFramebufferAttachmentParameter (#20317)
  • [x] Implementiere getProgramInfoLog (#13199)
  • [x] Implementiere getRenderbufferParameter (#20514)
  • [x] Implementiere getTexParameter (#20144)
  • [x] Implementiere getShaderPrecisionFormat (#16544)
  • [x] GetUniform implementieren (#21202)
  • [x] Implementiere getVertexAttrib
  • [x] Implementiere getVertexAttribOffset (#16893)
  • [x] Implementieren von isBuffer (#11357)
  • [x] Implementieren ist aktiviert (#13040)
  • [x] IsFramebuffer implementieren (#11357)
  • [x] Implementieren von isRenderBuffer (#11357)
  • [x] IsShader implementieren (#11072)
  • [x] Implementieren von isTexture (#11072)
  • [x] Implementiere readPixels (#10668)
  • [x] Implementiere renderbufferStorage (#13872)
  • [x] SampleCoverage implementieren
  • [x] Implementieren von stencilFunc (#10659)
  • [x] Implementieren von stencilFuncSeparate (#10659)
  • [x] Implementieren von stencilMask (#10659)
  • [x] Implementieren von stencilMaskSeparate (#10659)
  • [x] Implementieren von stencilOp (#10659)
  • [x] Implementieren von stencilOpSeparate (#10659)
  • [x] Implementieren von texSubImage2D (#11168)
  • [x] Uniform1i implementieren (#10417)
  • [x] Uniform1iv implementieren (#10417)
  • [x] Uniform2f implementieren (#10356)
  • [x] Uniform2fv implementieren (#10417)
  • [x] Uniform2i implementieren (#10417)
  • [x] Uniform2iv implementieren (#10417)
  • [x] Uniform3f implementieren (#10417)
  • [x] Uniform3fv implementieren (#10417)
  • [x] Uniform3i implementieren (#10417)
  • [x] Uniform3iv implementieren (#10417)
  • [x] Uniform4i implementieren (#10368)
  • [x] Uniform4iv implementieren (#10368)
  • [x] Implementieren von uniformMatrix2fv (#10671)
  • [x] Implementieren von uniformMatrix3fv (#10671)
  • [x] Implementieren von uniformMatrix4fv (#10671)
  • [x] Implementieren Sie das valideProgramm (#13199)
  • [x] Korrekt auf Limit in WebGLRenderingContext.activeTexture prüfen (#20531)
  • [x] Implementieren von gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE) (#20535)
  • [x] Implementieren von gl.getParameter(gl.BLEND_COLOR) (#20536)
  • [x] Implementieren von gl.getParameter(gl.COLOR_CLEAR_VALUE) (#20537)
  • [x] Implementieren von gl.getParameter(gl.COLOR_WRITEMASK) (#20538)
  • [x] Implementieren von gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS) (#20544)
  • [x] Implementieren von gl.getParameter(gl.DEPTH_RANGE) (#20545)
  • [x] Implementieren von gl.getParameter(gl.GENERATE_MIPMAP_HINT) (#20546)
  • [x] Unterstützung von IMPLEMENTATION_COLOR_READ_FORMAT und IMPLEMENTATION_COLOR_READ_TYPE (#20547)
  • [x] Unterstützung von MAX_FRAGMENT_UNIFORM_VECTORS und MAX_VERTEX_UNIFORM_VECTORS (#20548)
  • [x] Implementieren von gl.getParameter(gl.MAX_VARYING_VECTORS) (#20549)
  • [x] Unterstützung von SCISSOR_TEST und SCISSOR_BOX (#20551)
  • [x] Implementieren von gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL) (#20552)
  • [x] Implementieren von gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL) (#20553)
  • [x] Implementieren von gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL) (#20554)
  • [x] WebGLRenderingContext.bindBuffer Prüfungen richtig implementieren (#20556)
  • [x] Implementieren Sie die Prüfungen für gl.renderbufferStorage richtig (#20563)
  • [x] Prüfen Sie die Schecks in WebGLRenderingContext.getFramebufferAttachmentParameter (#20593)
  • [x] Überprüfe das Argument von WebGLRenderingContext.clear richtig (#20623)
  • [x] Überprüfen Sie, ob wir GLclampf korrekt binden (#20652)
  • [x] Gib die richtigen Typen in gl.getParameter und Freunde zurück (#20655)
  • [x] Überprüfen Sie, ob WebGL-Objekte an den richtigen WebGL-Kontext übergeben werden (#21133)
  • [x] Implementieren Sie die Attribut-Aliasing-Prüfung in WebGL (#21136)
  • [x] Behebt nicht initialisiertes Datenleck von renderbufferStorage (#13710)
  • [x] WebGLShader Destruktor bestätigt häufig beim Schließen von Webgl-Seiten (#21177)
  • [x] Überprüfen Sie unsere Validierungen erneut, wenn mehrere WebGLRenderingContext s auf derselben Seite vorhanden sind.
  • [x] Erstellen Sie Tests für die Änderungen in #20598 (#20607)
  • [x] Machen Sie unsere Validierungen stark typisiert (#10693)
  • [x] Entfernen Sie Umleitungen für einige WebGL-Parameter (#20550)
  • [x] Stoppen Sie den erneuten Export von WebGLCommand als CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Aktualisieren Sie unsere Winkelabhängigkeit
  • [x] Test mit der WebGL-Konformitätstestsuite (#10373)
  • [x] Aktualisieren Sie unsere Interpretation der Spezifikation, um sie mit anderen Browser-Engines abzugleichen (#8753)
  • [x] Cache, welche serverseitigen GL-Funktionen aktiviert sind (#20534)
  • [x] Umleitungen für WebGL-Programmparameter entfernen (#20560)
  • [x] Umleitungen für WebGL-Shader-Parameter entfernen (#20562)
  • [x] Überprüfe, ob der Framebuffer-Status in WebGL korrekt aktualisiert wird (#20570)
  • [x] Cache die benötigten Informationen für gl.getActiveAttrib und gl.getActiveUniform (#20600)
  • [x] Cache-Info benötigt für gl.getVertexAttrib und gl.getVertexAttribOffset (#20608)
  • [x] Leinwand nur als verschmutzt markieren, wenn kein Framebuffer gebunden ist (#21691)
  • [x] Überprüfen Sie, ob der Renderpufferspeicher die maximale Renderpuffergröße überschreitet (#21485)
  • [x] gl-pointcoord.html zeichnet nichts (#21719)
  • [x] oes-texture-half-float.html Panik mit einem GL-Fehler beim Ausführen im Desktop-Modus (#21663)
  • [x] Komponentenprüfung in Image2D-Methoden implementieren (#20595)
  • [x] Unterstützung der WebGL-Kontextoption von preserveDrawingBuffer (#21132)
A-contenwebgl B-meta

Hilfreichster Kommentar

Ich plane, glGetTexParameter zu versuchen.

Alle 40 Kommentare

cc @dmarcos

Ich werde an der Implementierung von generateMipmap arbeiten

@ConnorGBrewster Ich habe https://github.com/servo/servo/issues/10226 geöffnet, lass uns dort diskutieren :)

Ich möchte an getActiveUniform

@saurvs Ich habe https://github.com/servo/servo/issues/10397 für dich geöffnet,

Ich würde gerne an allen verbleibenden einheitlichen Methoden arbeiten, wenn das in Ordnung ist

@autrilla Sie gehören dir! Ich habe https://github.com/servo/servo/issues/10417 geöffnet, um den Überblick zu behalten. Fragen Sie dort gerne :)

Ich schaue mir die Stencil*-Funktionen an.

Ich knacke copyTex* und texSubImage2D

Versuch

Implement isShader
Implement isTexture

Ich möchte texSubImage2D helfen

@daoshengmu : klingt großartig!

@danlrobertson , texSubImage2D ?

@danlrobertson Entschuldigung, ich habe nicht bemerkt, dass Sie an texSubImage2D . Ich möchte nur bei der Implementierung von WebGL helfen. Wenn du noch daran arbeitest , kann ich copyTexImage2D und copyTexSubImage2D @emilio auswählen

@daoshengmu Kein Problem! Es ist völlig in Ordnung! Es ist schade, dass ich so lange gebraucht habe, um eine PR zu bekommen, aber leider passiert das Leben : smile:...

Bist du damit einverstanden, texSubImage2D ? Die notwendigen Komponenten habe ich bereits in wr_traits implementiert . Ich sollte in Kürze eine PR für copyTex* , aber ich hatte eigentlich noch nicht mit texSubImage2D angefangen. Wenn Sie texSubImage2D , machen Sie es! Ich habe keine besondere Bindung dazu. Wollte nur etwas über Webgl-Code lernen...

@danlrobertson Klar. Ich nehme texSubImage2D . Vielen Dank! 😄

Wenn es in Ordnung ist, werde ich daran arbeiten
Implement isFramebuffer
und
Implement isRenderBuffer

@DDEFISHER mach es! Könnten Sie für diese ein Problem eröffnen, damit ich Sie dorthin zuweisen kann?

Ich werde auch an isBuffer da es den anderen 2 ähnlich ist

Bitte geben Sie hier einen Kommentar ab, wenn Sie beabsichtigen, an diesem Thema zu arbeiten. Dankeschön!

Separate Ausgaben für einzelne APIs sind E-easy-Material; nicht dieser.

Kann jemand auf eine E-easy(ish)-Implementierung hinweisen, an der ich arbeiten kann? Vielen Dank :)

@ofekd isEnabled könnte eine gute Wahl sein, da enable und disable bereits implementiert sind!

@jdm ich übernehme es

@ofekd isEnabled kann als neuer Mitwirkender schwierig sein, da Sie die Dinge webgl-specific.html , wie die blending func oder die stencil func, sollten wirklich gute Ausgangspunkte sein. invalid-passed-params.html wahrscheinlich auch gute einfache Aufgaben.

@anholt Solange es nicht wesentlich kompliziert ist, macht es mir nichts aus, noch etwas arbeiten zu müssen. Ich habe noch nicht angefangen, daran zu arbeiten, aber für den Anfang sieht es so aus, als ob ich etwas ändern muss:

webrender_traits/src/webgl.rs
servo/components/script/dom/webglrenderingcontext.rs
servo/components/script/dom/webidls/WebGLRenderingContext.webidl

Sofern es andere Bemühungen nicht behindert, würde ich weiterhin an isEnabled

Ich werde an der Implementierung von ValidateProgram und getProgramInfoLog arbeiten

Ich werde bei uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv und framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage arbeiten.

Ich werde anspruchsvollere Webgl-Demos ausführen und Perf auf Servo messen und ich brauche diese Funktionen ;)

@MortimerGoro Ich habe an der FBO-Unterstützung gearbeitet (siehe ein paar kürzliche Zusammenführungen und https://github.com/anholt/servo/tree/webgl-fbo). Ich habe auch https://github.com/anholt/servo/tree/webgl-uniform-matrix-v für uniformmatrix zusammengestellt, aber die Tests müssen debuggt werden.

@anholt super ! Benötigen Sie Hilfe beim Uniformmatrix-Testen?

@MortimerGoro nur herauszufinden, was mit den unzuverlässigen Ergebnissen los ist.

Ich habe #13639 geöffnet, um den FBO-Support zu verfolgen. Möchten Sie das zu framebufferRenderbuffer/framebufferTexture2D hinzufügen?

@shravan-achar könnte daran interessiert sein, hier an den verbleibenden zu arbeiten.

Es sieht so aus, als ob das Fehlen von toDataURL() für WebGL die Ursache für viele verbleibende Testfallprobleme ist (wie asin_001_to_006.html ).

Nur noch 5 fehlende APIs.

ich, @taki-jaro, @mrowqa und @xanewok werden dieses Thema als studentisches Projekt bearbeiten
cc @KiChjang

Ich plane, glGetTexParameter zu versuchen.

Arbeiten an getFramebufferAttachmentParameter() .

Ich möchte getRenderbufferParameter

Dieses Problem scheint aus irgendeinem Grund keine Aufzeichnungen mehr über Änderungen zu führen.

Edit: Es scheint jetzt zu funktionieren.

Ich habe eine Reihe von Problemen hinzugefügt.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen