Servo: Implementar completamente WebGL 1.0

Creado en 26 mar. 2016  ·  40Comentarios  ·  Fuente: servo/servo

Esto está destinado a ser un meta-error.

Algunos de los métodos restantes están bloqueados en https://github.com/servo/servo/issues/5014 (aquellos que reciben ArrayBufferView o BufferDataSource y tienen anulaciones), pero algunos otros pueden ser implementado sin problemas.

Intentaré presentar problemas individuales para cada deficiencia restante, ya que algunos de ellos pueden ser E-Easy .

Información general sobre errores de WebGL

Haga clic para ampliar

Especificaciones

La especificación WebGL 1.0 está aquí .

Especificaciones GLES 2.0

WebGL se basa en la especificación GLES 2.0, por lo que la especificación WebGL a menudo aprovecha los detalles. Puede encontrar una versión en PDF aquí .

Código actual

DOM

El lado DOM del código WebGL se puede encontrar en los siguientes archivos:

  • 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

Hilo de WebGL

El hilo WebGL es el hilo que recibe los mensajes WebGL del DOM y lo ejecuta o lo envía al backend de WebRender.

Probablemente no necesite tocar nada aquí, pero en caso de que quiera echar un vistazo, el archivo es:

  • components/canvas/webgl_paint_thread.rs

Definición, ejecución y otros tipos de comandos de WebGL

El resto de las definiciones de WebGL y las implementaciones de mandatos están en webrender_traits 's webgl.rs archivo , con el fin de ser compartido por ambos servo y WebRender.

Querrá echar un vistazo a la definición WebGLCommand y a la función apply .

Para trabajar activamente con él, lo mejor es utilizar una anulación de carga .

Tenga en cuenta que WebGLCommand se reexporta de canvas_traits como CanvasWebGLMessage por razones heredadas (para evitar problemas adicionales de rebase mientras webrender aún no se había fusionado).

Faltan controles de seguridad

  • [] Implementar correctamente "Atributos de vértice habilitados y verificación de rango" (# 20599)
  • [] Verifique que implementemos todas las restricciones GLSL correctamente (# 20601)
  • [] Implementar correctamente "Completitud de los adjuntos de búfer de marcos de mapas de cubos" (# 20654)
  • [] Implementar comprobaciones de WebGL contra ciclos de retroalimentación (# 21288)
  • [] Implementar correctamente verificaciones de esténcil (# 20555)
  • [] Inicializar texturas a negro transparente en algunos casos (# 21716)
  • [] Validar fuente pasada a gl.shaderSource() (# 21754)

Implementaciones pendientes

  • [] Admite la opción de contexto WebGL de antialiasing (# 21285)
  • [] Admite descartar y recrear contextos WebGL (# 15266)
  • [] Implementar texturas comprimidas en WebGL (# 20594)
  • [] Implementar el dibujo de un lienzo WebGL en un lienzo 2D (# 21556)
  • [] Implementar ImageBitmap (# 20650)
  • [] Cree un búfer de dibujo más pequeño que el solicitado cuando sea necesario (# 21718)
  • [] El lienzo de WebGL se escala cuando se hace en pantalla completa (# 21290)
  • [] Defiéndase adecuadamente contra desbordamientos en WebGLRenderingContext.bufferSubData (# 20558)

Otras cosas y mejoras pendientes

  • [] Robar el conocimiento de Firefox sobre la solidez del contexto de WebGL (# 21144)
  • [] Admite correctamente el atributo extendido de WebIDL [AllowShared] (# 20515)
  • [] Caché drawingBufferWidth / drawingBufferHeight en WebGLRenderingContext (# 20530)
  • [] Resultado de la caché de WebGLRenderingContext.getContextAttributes (# 20532)
  • [] No asigne un búfer vacío por nada en WebGLRenderingContext.bufferData (# 20557)
  • [] Elimine las indirecciones para los parámetros de textura de WebGL (# 20596)
  • [] Limpiar la infraestructura de la extensión de WebGL (# 20642)
  • [] Tal vez introduzca una nueva fuente de tareas específica para WebGL (# 20643)
  • [] Las pruebas de Khronos para WebGL no deben usar un índice en el nombre de la prueba (# 20668)
  • [] [Throws] no se aplica por sobrecarga (# 20516)
  • [] Fallo al cargar el sombreador en html5test.com (# 21191)
  • [] La demostración de agua de WebGL no muestra nada (# 21173)
  • [] Firefox informa límites más grandes de "vectores máximos variables", "búfer de color máximo" y "unidades máximas de textura combinadas" que Servo (# 21172)
  • [] Investigue aplicaciones reales basadas en webgl (# 21151)
  • [] Cree un generador de perfiles WebGL (# 21150)

Cosas hechas

  • [x] Compruebe si hay caracteres no válidos en la ubicación de WebGL y los nombres de atributo (# 21287)
  • [x] Audita el comportamiento de WebGLRenderingContext.getProgramInfoLog (# 20561)
  • [x] handle_object_deletion puede estar equivocado (# 21352)
  • [x] Borre el framebuffer al inicializar y cambiar el tamaño del lienzo WebGL (# 21475)
  • [x] Admite uniones como parámetro distintivo de WebIDL (n.º 20513)
  • [x] Implementar la sobrecarga texImage2D pendiente (# 10443)
  • [x] Implementar copyTexImage2D (# 11147)
  • [x] Implementar copyTexSubImage2D (# 11147)
  • [x] Implementar detachShader (# 10215)
  • [x] Finalizar implementación (# 10212, # 10215)
  • [x] Implementar flush (# 10213, # 10215)
  • [x] Implementar framebufferRenderbuffer (# 13639)
  • [x] Implementar framebufferTexture2D (# 13639)
  • [x] Implementar generateMipmap (# 10215)
  • [x] Implementar getActiveAttrib (# 10379)
  • [x] Implementar getActiveUniform (# 10397)
  • [x] Implementar getAttachedShaders (# 20411)
  • [x] Implementar getFramebufferAttachmentParameter (# 20317)
  • [x] Implementar getProgramInfoLog (# 13199)
  • [x] Implementar getRenderbufferParameter (# 20514)
  • [x] Implementar getTexParameter (# 20144)
  • [x] Implementar getShaderPrecisionFormat (# 16544)
  • [x] Implementar getUniform (# 21202)
  • [x] Implementar getVertexAttrib
  • [x] Implementar getVertexAttribOffset (# 16893)
  • [x] Implementar isBuffer (# 11357)
  • [x] Implementar isEnabled (# 13040)
  • [x] Implementar isFramebuffer (# 11357)
  • [x] Implementar isRenderBuffer (# 11357)
  • [x] Implementar isShader (# 11072)
  • [x] Implementar isTexture (# 11072)
  • [x] Implementar readPixels (# 10668)
  • [x] Implementar renderbufferStorage (# 13872)
  • [x] Implementar sampleCoverage
  • [x] Implementar stencilFunc (# 10659)
  • [x] Implementar stencilFuncSeparate (# 10659)
  • [x] Implementar stencilMask (# 10659)
  • [x] Implementar stencilMaskSeparate (# 10659)
  • [x] Implementar stencilOp (# 10659)
  • [x] Implementar stencilOpSeparate (# 10659)
  • [x] Implementar texSubImage2D (# 11168)
  • [x] Implementar uniform1i (# 10417)
  • [x] Implementar uniform1iv (# 10417)
  • [x] Implementar uniform2f (# 10356)
  • [x] Implementar uniform2fv (# 10417)
  • [x] Implementar uniform2i (# 10417)
  • [x] Implementar uniform2iv (# 10417)
  • [x] Implementar uniform3f (# 10417)
  • [x] Implementar uniform3fv (# 10417)
  • [x] Implementar uniform3i (# 10417)
  • [x] Implementar uniform3iv (# 10417)
  • [x] Implementar uniform4i (# 10368)
  • [x] Implementar uniform4iv (# 10368)
  • [x] Implementar uniformMatrix2fv (# 10671)
  • [x] Implementar uniformMatrix3fv (# 10671)
  • [x] Implementar uniformMatrix4fv (# 10671)
  • [x] Implementar validateProgram (# 13199)
  • [x] Verifique adecuadamente el límite en WebGLRenderingContext.activeTexture (# 20531)
  • [x] Implementar gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE) (# 20535)
  • [x] Implementar gl.getParameter(gl.BLEND_COLOR) (# 20536)
  • [x] Implementar gl.getParameter(gl.COLOR_CLEAR_VALUE) (# 20537)
  • [x] Implementar gl.getParameter(gl.COLOR_WRITEMASK) (# 20538)
  • [x] Implementar gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS) (# 20544)
  • [x] Implementar gl.getParameter(gl.DEPTH_RANGE) (# 20545)
  • [x] Implementar gl.getParameter(gl.GENERATE_MIPMAP_HINT) (# 20546)
  • [x] Soporte IMPLEMENTATION_COLOR_READ_FORMAT y IMPLEMENTATION_COLOR_READ_TYPE (# 20547)
  • [x] Soporte MAX_FRAGMENT_UNIFORM_VECTORS y MAX_VERTEX_UNIFORM_VECTORS (# 20548)
  • [x] Implementar gl.getParameter(gl.MAX_VARYING_VECTORS) (# 20549)
  • [x] Soporte SCISSOR_TEST y SCISSOR_BOX (# 20551)
  • [x] Implementar gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL) (# 20552)
  • [x] Implementar gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL) (# 20553)
  • [x] Implementar gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL) (# 20554)
  • [x] Implementar correctamente WebGLRenderingContext.bindBuffer cheques (# 20556)
  • [x] Implemente correctamente las comprobaciones de gl.renderbufferStorage (# 20563)
  • [x] Audita los cheques en WebGLRenderingContext.getFramebufferAttachmentParameter (# 20593)
  • [x] Verifique correctamente el argumento de WebGLRenderingContext.clear (# 20623)
  • [x] Compruebe si enlazamos GLclampf correctamente (# 20652)
  • [x] Devuelve los tipos correctos en gl.getParameter y amigos (# 20655)
  • [x] Verifique correctamente que los objetos WebGL se pasen al contexto WebGL correcto (# 21133)
  • [x] Implementar la verificación de alias de atributos en WebGL (# 21136)
  • [x] Soluciona la fuga de datos no inicializados de renderbufferStorage (# 13710)
  • [x] WebGLShader destructor afirma con frecuencia al cerrar páginas webgl (# 21177)
  • [x] Vuelva a verificar nuestras validaciones cuando haya varios WebGLRenderingContext s en la misma página.
  • [x] Cree pruebas para los cambios en # 20598 (# 20607)
  • [x] Haga nuestras validaciones fuertemente tipadas (# 10693)
  • [x] Elimine las indirecciones para algunos parámetros de WebGL (# 20550)
  • [x] Dejar de reexportar WebGLCommand como CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Actualiza nuestra dependencia de ángulos
  • [x] Prueba con el conjunto de pruebas de conformidad de WebGL (n. ° 10373)
  • [x] Actualice nuestra interpretación de la especificación para que coincida con otros motores de navegador (# 8753)
  • [x] Almacene en caché qué capacidades de GL del lado del servidor están habilitadas (# 20534)
  • [x] Elimine las indirecciones para los parámetros del programa WebGL (# 20560)
  • [x] Elimina las indirecciones para los parámetros del sombreador de WebGL (# 20562)
  • [x] Audite que el estado del framebuffer se actualice correctamente en WebGL (# 20570)
  • [x] Guarda en caché la información necesaria para gl.getActiveAttrib y gl.getActiveUniform (# 20600)
  • [x] Se necesita información de caché para gl.getVertexAttrib y gl.getVertexAttribOffset (# 20608)
  • [x] Solo marcar el lienzo como sucio cuando no haya ningún framebuffer enlazado (# 21691)
  • [x] Verifique que el almacenamiento del búfer de procesamiento exceda el tamaño máximo del búfer de procesamiento (# 21485)
  • [x] gl-pointcoord.html no dibuja nada (# 21719)
  • [x] oes-texture-half-float.html entra en pánico con un error GL cuando se ejecuta en modo de escritorio (# 21663)
  • [x] Implementar la verificación de componentes en métodos Image2D (# 20595)
  • [x] Admite la opción de contexto WebGL de preserveDrawingBuffer (# 21132)
A-contenwebgl B-meta

Comentario más útil

Planeo intentar glGetTexParameter.

Todos 40 comentarios

cc @dmarcos

Estaré trabajando en la implementación de generateMipmap

@ConnorGBrewster Abrí https://github.com/servo/servo/issues/10226, discutamos allí :)

Me gustaría trabajar en getActiveUniform

@saurvs Abrí https://github.com/servo/servo/issues/10397 para ti, no

Me gustaría trabajar en todos los métodos uniformes restantes, si está bien

@autrilla ¡ Son tuyos! Abrí https://github.com/servo/servo/issues/10417 para realizar un seguimiento de ellos, no dude en dejar cualquier pregunta allí :)

Estoy viendo las funciones de la plantilla *.

Estoy probando copyTex* y texSubImage2D

Intentando

Implement isShader
Implement isTexture

Me gustaría ayudar texSubImage2D

@daoshengmu : ¡suena genial!

@danlrobertson , ¿sigues trabajando en texSubImage2D ?

@danlrobertson Lo siento porque no me di cuenta de que estás trabajando en texSubImage2D . Solo quiero ayudar en la implementación de WebGL. Si todavía está trabajando en ello, puedo elegir copyTexImage2D y copyTexSubImage2D @emilio

@daoshengmu ¡ No hay problema! ¡Está totalmente bien! Es mi culpa haber tardado tanto en conseguir un PR, pero, por desgracia, la vida pasa: sonríe: ...

¿Está de acuerdo con tomar texSubImage2D ? Ya implementé los componentes necesarios en wr_traits . Debería tener un PR en breve por copyTex* , pero en realidad no había comenzado en texSubImage2D . Si quieres texSubImage2D , ¡adelante! No le tengo ningún apego especial. Solo quería aprender un poco sobre el código webgl ...

@danlrobertson Seguro. Tomaré texSubImage2D . ¡Gracias! 😄

Si está bien, voy a trabajar en
Implement isFramebuffer
y
Implement isRenderBuffer

@DDEFISHER ¡adelante! ¿Te importaría abrir un número para ellos para poder asignarte allí?

También voy a trabajar en isBuffer ya que es similar a los otros 2

Haga un comentario aquí si tiene la intención de trabajar en este problema. ¡Gracias!

Temas separados para API individuales son material E-easy; este no.

¿Alguien puede señalar una implementación de E-easy (ish) en la que pueda trabajar? Gracias :)

@ofekd isEnabled podría ser una buena opción, ¡ya que enable y disable ya están implementados!

@jdm me lo llevo

@ofekd isEnabled podría ser complicado como nuevo colaborador, porque necesita cambiar las cosas en los módulos. Algunos de los casos de prueba en webgl-specific.html , como los de función de combinación o de plantilla, deberían ser muy buenos puntos de partida. invalid-passed-params.html probablemente también tenga buenas tareas fáciles.

@anholt Mientras no sea muy complicado, no me importa tener que trabajar un poco más. Todavía no comencé a trabajar en esto, pero para empezar, parece que necesito cambiar:

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

A menos que de alguna manera obstaculice otros esfuerzos, seguiría trabajando en isEnabled

Estaré trabajando en la implementación de validateProgram y getProgramInfoLog

Trabajaré en uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv y framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage.

Voy a ejecutar demostraciones webgl más exigentes y medir el rendimiento en el servo y necesito esas funciones;)

@MortimerGoro He estado trabajando en el soporte de FBO (vea un par de fusiones recientes y https://github.com/anholt/servo/tree/webgl-fbo). También armé https://github.com/anholt/servo/tree/webgl-uniform-matrix-v para uniformmatrix, pero las pruebas deben depurarse.

@anholt ¡increíble! ¿Necesita ayuda con las pruebas de matriz uniforme?

@MortimerGoro acaba de averiguar qué está pasando con los resultados poco fiables.

Abrí el número 13639 para rastrear el soporte de FBO. ¿Quieres agregar eso a framebufferRenderbuffer / framebufferTexture2D?

@ shravan-achar podría estar interesado en trabajar en los restantes aquí.

Parece que perder toDataURL() para WebGL es la causa de muchos problemas restantes de casos de prueba (como asin_001_to_006.html )

Ahora solo faltan 5 API.

yo, @ taki-jaro, @mrowqa y @xanewok trabajaremos en este tema como un proyecto estudiantil
cc @KiChjang

Planeo intentar glGetTexParameter.

Trabajando en getFramebufferAttachmentParameter() .

Me gustaría hacer getRenderbufferParameter

Este problema ya no parece mantener un registro de ediciones por alguna razón.

Editar: parece estar funcionando ahora.

Agregué un montón de problemas.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

noisiak picture noisiak  ·  3Comentarios

Manishearth picture Manishearth  ·  4Comentarios

shinglyu picture shinglyu  ·  4Comentarios

CYBAI picture CYBAI  ·  3Comentarios

jdm picture jdm  ·  3Comentarios