Servo: Implémenter complètement WebGL 1.0

Créé le 26 mars 2016  ·  40Commentaires  ·  Source: servo/servo

C'est censé être un méta-bug.

Certaines des méthodes restantes sont bloquées sur https://github.com/servo/servo/issues/5014 (celles qui reçoivent ArrayBufferView ou BufferDataSource et ont des dérogations), mais d'autres peuvent être mis en œuvre sans problème.

Je vais essayer de classer des problèmes individuels pour chaque déficience restante, car certains d'entre eux peuvent être de E-Easy .

Informations générales sur les bogues WebGL

Cliquez pour agrandir

Spécification

La spécification WebGL 1.0 est ici .

Spécifications GLES 2.0

WebGL est basé sur la spécification GLES 2.0, donc la spécification WebGL exploite souvent les détails. Vous pouvez trouver une version PDF ici .

Code actuel

DOM

Le côté DOM du code WebGL se trouve dans les fichiers suivants :

  • 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

Fil WebGL

Le thread WebGL est le thread qui reçoit les messages WebGL du DOM et les exécute ou les envoie au backend WebRender.

Vous n'avez probablement pas besoin de toucher à quoi que ce soit ici, mais au cas où vous voudriez jeter un œil, le fichier est :

  • components/canvas/webgl_paint_thread.rs

Définition, exécution et autres types de commandes WebGL

Le reste des définitions de WebGL et les implémentations de commande sont en webrender_traits « s webgl.rs fichier , afin d'être partagée par les deux servo et WebRender.

Jetez un œil à la définition WebGLCommand et à la fonction apply .

Pour travailler activement avec elle, le mieux est d'utiliser une dérogation Cargo .

Notez que WebGLCommand est réexporté à partir de canvas_traits tant que CanvasWebGLMessage pour des raisons héritées (pour éviter des problèmes de rebase supplémentaires alors que webrender n'avait pas encore fusionné).

Contrôles de sécurité manquants

  • [ ] Implémentez correctement « Attributs de sommet activés et vérification de la plage » (#20599)
  • [ ] Vérifier que nous implémentons correctement toutes les contraintes GLSL (#20601)
  • [ ] Implémentez correctement « Complétude des pièces jointes du tampon de trame de la carte du cube » (#20654)
  • [ ] Implémenter les contrôles WebGL par rapport aux boucles de rétroaction (#21288)
  • [ ] Appliquer correctement les contrôles de pochoir (#20555)
  • [ ] Initialiser les textures en noir transparent dans certains cas (#21716)
  • [ ] Valider la source transmise à gl.shaderSource() (#21754)

Implémentations en attente

  • [ ] Prise en charge antialiasing option de contexte WebGL de
  • [ ] Prise en charge de la suppression et de la recréation des contextes WebGL (#15266)
  • [ ] Implémenter des textures compressées dans WebGL (#20594)
  • [ ] Implémenter le dessin d'un canevas WebGL dans un canevas 2D (#21556)
  • [ ] Mettre en œuvre ImageBitmap (#20650)
  • [ ] Créer un tampon de dessin plus petit que demandé si nécessaire (#21718)
  • [ ] Le canevas WebGL est mis à l'échelle lorsqu'il est affiché en plein écran (#21290)
  • [ ] Se défendre correctement contre les débordements de WebGLRenderingContext.bufferSubData (#20558)

Autres choses et améliorations en attente

  • [ ] Voler les connaissances de Firefox sur la robustesse du contexte WebGL (#21144)
  • [ ] Prend en charge correctement l'attribut étendu WebIDL [AllowShared] (#20515)
  • [ ] Cache drawingBufferWidth / drawingBufferHeight dans WebGLRenderingContext (#20530)
  • [ ] Cacher le résultat de WebGLRenderingContext.getContextAttributes (#20532)
  • [ ] Ne pas allouer un tampon vide pour rien dans WebGLRenderingContext.bufferData (#20557)
  • [ ] Supprimer les indirections pour les paramètres de texture WebGL (#20596)
  • [ ] Nettoyer l'infrastructure d'extension WebGL (#20642)
  • [ ] Peut-être introduire une nouvelle source de tâches spécifique à WebGL (#20643)
  • [ ] Les tests Khronos pour WebGL ne devraient pas utiliser d'index dans le nom du test (#20668)
  • [ ] [Throws] ne s'applique pas par surcharge (#20516)
  • [ ] Crash lors du chargement du shader sur html5test.com (#21191)
  • [ ] La démo d'eau WebGL n'affiche rien (#21173)
  • [ ] Firefox signale des limites de « vecteurs variables max », « tampon de couleur max » et « unités de texture combinées max. » plus grandes que Servo (#21172)
  • [ ] Enquêter sur de vraies applications Webgl (#21151)
  • [ ] Créer un profileur WebGL (#21150)

Fait des trucs

  • [x] Vérifiez les caractères non valides dans l'emplacement WebGL et les noms d'attribut (#21287)
  • [x] Auditer le comportement de WebGLRenderingContext.getProgramInfoLog (#20561)
  • [x] handle_object_deletion peut être faux (#21352)
  • [x] Effacer le framebuffer lors de l'initialisation et du redimensionnement du canevas WebGL (#21475)
  • [x] Prise en charge des unions en tant que paramètre distinctif WebIDL (#20513)
  • [x] Implémenter la surcharge texImage2D en attente (#10443)
  • [x] Implémenter copyTexImage2D (#11147)
  • [x] Implémenter copyTexSubImage2D (#11147)
  • [x] Implémenter detachShader (#10215)
  • [x] Finition de l'outil (#10212, #10215)
  • [x] Mettre en œuvre le flush (#10213, #10215)
  • [x] Implémenter framebufferRenderbuffer (#13639)
  • [x] Implémenter framebufferTexture2D (#13639)
  • [x] Implémenter generateMipmap (#10215)
  • [x] Implémenter getActiveAttrib (#10379)
  • [x] Implémenter getActiveUniform (#10397)
  • [x] Implémenter getAttachedShaders (#20411)
  • [x] Implémenter getFramebufferAttachmentParameter (#20317)
  • [x] Implémenter getProgramInfoLog (#13199)
  • [x] Implémenter getRenderbufferParameter (#20514)
  • [x] Implémenter getTexParameter (#20144)
  • [x] Implémenter getShaderPrecisionFormat (#16544)
  • [x] Implémenter getUniform (#21202)
  • [x] Implémenter getVertexAttrib
  • [x] Implémenter getVertexAttribOffset (#16893)
  • [x] Implémenter isBuffer (#11357)
  • [x] Implémenter isEnabled (#13040)
  • [x] Implémenter isFramebuffer (#11357)
  • [x] Implémenter isRenderBuffer (#11357)
  • [x] Implémenter isShader (#11072)
  • [x] Implémenter isTexture (#11072)
  • [x] Implémenter readPixels (#10668)
  • [x] Implémenter renderbufferStorage (#13872)
  • [x] Implémenter sampleCoverage
  • [x] Implémenter stencilFunc (#10659)
  • [x] Implémenter stencilFuncSeparate (#10659)
  • [x] Implémenter stencilMask (#10659)
  • [x] Implémenter stencilMaskSeparate (#10659)
  • [x] Implémenter stencilOp (#10659)
  • [x] Implémenter stencilOpSeparate (#10659)
  • [x] Implémenter texSubImage2D (#11168)
  • [x] Implémenter uniform1i (#10417)
  • [x] Implémenter uniform1iv (#10417)
  • [x] Implémenter uniform2f (#10356)
  • [x] Implémenter uniform2fv (#10417)
  • [x] Implémenter uniform2i (#10417)
  • [x] Implémenter uniform2iv (#10417)
  • [x] Implémenter uniform3f (#10417)
  • [x] Implémenter uniform3fv (#10417)
  • [x] Implémenter uniform3i (#10417)
  • [x] Implémenter uniform3iv (#10417)
  • [x] Implémenter uniform4i (#10368)
  • [x] Implémenter uniform4iv (#10368)
  • [x] Implémenter uniformMatrix2fv (#10671)
  • [x] Implémenter uniformMatrix3fv (#10671)
  • [x] Implémenter uniformMatrix4fv (#10671)
  • [x] Implémenter le programme validate (#13199)
  • [x] Vérifiez correctement la limite en WebGLRenderingContext.activeTexture (#20531)
  • [x] Mettre en œuvre gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE) (#20535)
  • [x] Mettre en œuvre gl.getParameter(gl.BLEND_COLOR) (#20536)
  • [x] Mettre en œuvre gl.getParameter(gl.COLOR_CLEAR_VALUE) (#20537)
  • [x] Mettre en œuvre gl.getParameter(gl.COLOR_WRITEMASK) (#20538)
  • [x] Mettre en œuvre gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS) (#20544)
  • [x] Mettre en œuvre gl.getParameter(gl.DEPTH_RANGE) (#20545)
  • [x] Mettre en œuvre gl.getParameter(gl.GENERATE_MIPMAP_HINT) (#20546)
  • [x] Support IMPLEMENTATION_COLOR_READ_FORMAT et IMPLEMENTATION_COLOR_READ_TYPE (#20547)
  • [x] Support MAX_FRAGMENT_UNIFORM_VECTORS et MAX_VERTEX_UNIFORM_VECTORS (#20548)
  • [x] Mettre en œuvre gl.getParameter(gl.MAX_VARYING_VECTORS) (#20549)
  • [x] Support SCISSOR_TEST et SCISSOR_BOX (#20551)
  • [x] Mettre en œuvre gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL) (#20552)
  • [x] Mettre en œuvre gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL) (#20553)
  • [x] Mettre en œuvre gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL) (#20554)
  • [x] Mettre en œuvre correctement les contrôles WebGLRenderingContext.bindBuffer (#20556)
  • [x] Mettre en œuvre correctement les contrôles pour gl.renderbufferStorage (#20563)
  • [x] Auditer les chèques en WebGLRenderingContext.getFramebufferAttachmentParameter (#20593)
  • [x] Vérifiez correctement l'argument de WebGLRenderingContext.clear (#20623)
  • [x] Vérifiez si nous lions GLclampf correctement (#20652)
  • [x] Renvoie les types corrects dans gl.getParameter et amis (#20655)
  • [x] Vérifiez correctement que les objets WebGL sont passés au bon contexte WebGL (#21133)
  • [x] Implémenter la vérification des alias d'attributs dans WebGL (#21136)
  • [x] Correction d'une fuite de données non initialisée de renderbufferStorage (#13710)
  • [x] Le destructeur WebGLShader affirme fréquemment lors de la fermeture des pages webgl (#21177)
  • [x] Revérifiez nos validations lorsqu'il y a plusieurs WebGLRenderingContext s dans la même page.
  • [x] Créer des tests pour les changements dans #20598 (#20607)
  • [x] Rendre nos validations fortement typées (#10693)
  • [x] Supprimer les indirections pour certains paramètres WebGL (#20550)
  • [x] Arrêtez de réexporter WebGLCommand en CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Mettre à jour notre dépendance d'angle
  • [x] Test à l'aide de la suite de tests de conformité WebGL (#10373)
  • [x] Mettre à jour notre interprétation de la spécification pour qu'elle corresponde aux autres moteurs de navigateur (#8753)
  • [x] Cache quelles fonctionnalités GL côté serveur sont activées (#20534)
  • [x] Supprimer les indirections pour les paramètres du programme WebGL (#20560)
  • [x] Supprimer les indirections pour les paramètres de shader WebGL (#20562)
  • [x] Vérifiez que l'état du framebuffer est correctement mis à jour dans WebGL (#20570)
  • [x] Cachez les informations nécessaires pour gl.getActiveAttrib et gl.getActiveUniform (#20600)
  • [x] Informations de cache nécessaires pour gl.getVertexAttrib et gl.getVertexAttribOffset (#20608)
  • [x] Marquer le canevas comme sale uniquement lorsqu'aucun framebuffer n'est lié (#21691)
  • [x] Vérifiez que le stockage du tampon de rendu dépasse la taille maximale du tampon de rendu (#21485)
  • [x] gl-pointcoord.html ne dessine rien (#21719)
  • [x] oes-texture-half-float.html panique avec une erreur GL lors de l'exécution en mode bureau (#21663)
  • [x] Implémenter la vérification des composants dans les méthodes Image2D (#20595)
  • [x] Prise en charge preserveDrawingBuffer option de contexte WebGL de
A-contenwebgl B-meta

Commentaire le plus utile

Je prévois d'essayer glGetTexParameter.

Tous les 40 commentaires

cc @dmarcos

Je travaillerai sur l'implémentation de generateMipmap

@ConnorGBrewster J'ai ouvert https://github.com/servo/servo/issues/10226, discutons-en là :)

J'aimerais travailler sur getActiveUniform

@saurvs j'ai ouvert https://github.com/servo/servo/issues/10397 pour vous, n'hésitez pas à poser toute question que vous pourriez avoir là :)

J'aimerais travailler sur toutes les méthodes uniformes restantes, si ça vous va

@autrilla Ils sont à vous ! J'ai ouvert https://github.com/servo/servo/issues/10417 pour les suivre, n'hésitez pas à y laisser vos questions :)

Je regarde les fonctions stencil*.

Je prends un crack à copyTex* et texSubImage2D

Tenter

Implement isShader
Implement isTexture

Je voudrais aider texSubImage2D

@daoshengmu :

@danlrobertson , travaillez-vous toujours sur texSubImage2D ?

@danlrobertson Désolé car je n'avais pas remarqué que vous travailliez sur texSubImage2D . Je veux juste aider à l'implémentation de WebGL. Si vous travaillez toujours dessus, je peux choisir copyTexImage2D et copyTexSubImage2D @emilio

@daoshengmu Pas de problème ! C'est tout à fait correct ! C'est mon mal d'avoir mis autant de temps à obtenir un PR, mais hélas la vie arrive : smile:...

Acceptez-vous de prendre texSubImage2D ? J'ai déjà implémenté les composants nécessaires dans copyTex* , mais en fait je n'avais pas commencé sur texSubImage2D . Si vous voulez texSubImage2D , allez-y ! Je n'y ai pas d'attachement particulier. Je voulais juste en savoir un peu plus sur le code webgl...

@danlrobertson Bien sûr. Je prendrai texSubImage2D . Merci! ??

Si ça va, je vais travailler dessus
Implement isFramebuffer
et
Implement isRenderBuffer

@DDEFISHER vas-y ! Cela vous dérange d'ouvrir un problème pour ceux-ci afin que je puisse vous y affecter ?

Je vais aussi travailler sur isBuffer car il est similaire aux 2 autres

Veuillez faire un commentaire ici si vous avez l'intention de travailler sur ce problème. Merci!

Les problèmes distincts pour les API individuelles sont le matériel E-easy ; pas celui-ci.

Quelqu'un peut-il indiquer une implémentation E-easy(ish) sur laquelle je peux travailler ? Merci :)

@ofekd isEnabled pourrait être un bon choix, puisque enable et disable sont déjà implémentés !

@jdm je vais le prendre

@ofekd isEnabled peut être délicat en tant que nouveau contributeur, car vous devez changer les choses entre les modules. Certains des cas de test de webgl-specific.html , comme les fonctions de mélange ou de pochoir, devraient être de très bons points de départ. invalid-passed-params.html probablement aussi de bonnes tâches faciles.

@anholt Tant que ce n'est pas très compliqué, cela ne me dérange pas de devoir travailler un peu plus. Je n'ai pas encore commencé à travailler dessus, mais pour commencer, il semble que je doive changer :

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

À moins que cela n'entrave d'autres efforts, je continuerais à travailler sur isEnabled

Je travaillerai sur la mise en œuvre de validateProgram et getProgramInfoLog

Je travaillerai chez uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv et framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage.

Je vais exécuter des démos webgl plus exigeantes et mesurer les performances sur le servo et j'ai besoin de ces fonctions ;)

@MortimerGoro J'ai travaillé sur le support FBO (voir quelques fusions récentes et https://github.com/anholt/servo/tree/webgl-fbo). J'ai également mis en place https://github.com/anholt/servo/tree/webgl-uniform-matrix-v pour uniformmatrix, mais les tests doivent être débogués.

@anholt génial ! avez-vous besoin d'aide pour les tests uniformmatrix ?

@MortimerGoro vient juste de comprendre ce qui se passe avec les résultats peu fiables.

J'ai ouvert #13639 pour suivre le support FBO. Voulez-vous ajouter cela à framebufferRenderbuffer/framebufferTexture2D ?

@shravan-achar pourrait être intéressé à travailler sur les autres ici.

Il semble que l'absence de toDataURL() pour WebGL soit la cause de nombreux problèmes de cas de test restants (comme asin_001_to_006.html )

Seulement 5 API manquantes maintenant.

moi, @taki-jaro, @mrowqa et @xanewok travaillerons sur cette question en tant que projet étudiant
cc @KiChjang

Je prévois d'essayer glGetTexParameter.

Travailler sur getFramebufferAttachmentParameter() .

J'aimerais faire getRenderbufferParameter

Ce problème ne semble plus conserver un enregistrement des modifications pour une raison quelconque.

Edit : ça a l'air de fonctionner maintenant.

J'ai ajouté un tas de problèmes.

Cette page vous a été utile?
0 / 5 - 0 notes