Servo: Implementar totalmente WebGL 1.0

Criado em 26 mar. 2016  ·  40Comentários  ·  Fonte: servo/servo

Pretende-se que seja um meta-bug.

Alguns dos métodos restantes estão bloqueados em https://github.com/servo/servo/issues/5014 (aqueles que recebem ArrayBufferView ou BufferDataSource e têm substituições), mas alguns outros podem ser implementado sem problemas.

Tentarei arquivar questões individuais para cada deficiência remanescente, já que algumas delas podem ser E-Easy .

Informações gerais para bugs WebGL

Clique para expandir

Spec

A especificação WebGL 1.0 está aqui .

GLES 2.0 spec

O WebGL é baseado na especificação GLES 2.0, portanto, a especificação WebGL frequentemente aproveita os detalhes para isso. Você pode encontrar uma versão em PDF aqui .

Código Atual

DOM

O lado DOM do código WebGL pode ser encontrado nos seguintes arquivos:

  • 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

Discussão WebGL

O encadeamento WebGL é o encadeamento que recebe as mensagens WebGL do DOM e as executa ou despacha para o back-end do WebRender.

Você provavelmente não precisa tocar em nada aqui, mas caso queira dar uma olhada, o arquivo é:

  • components/canvas/webgl_paint_thread.rs

Definição, execução e outros tipos de comando WebGL

O resto das definições WebGL e as implementações de comando estão no arquivo webrender_traits webgl.rs , para serem compartilhados tanto pelo Servo quanto pelo WebRender.

Você vai querer dar uma olhada na definição WebGLCommand e na função apply .

Para trabalhar ativamente com ele, o melhor é usar um override de carga .

Observe que WebGLCommand é reexportado de canvas_traits como CanvasWebGLMessage por motivos de legado (para evitar dor extra de rebase enquanto o webrender ainda não se fundiu).

Verificações de segurança ausentes

  • [] Implementar adequadamente "Verificação de alcance e atributos de vértice ativados" (# 20599)
  • [] Verifique se implementamos todas as restrições GLSL corretamente (# 20601)
  • [] Implementar adequadamente "Completude dos anexos do Framebuffer do Mapa do Cubo" (# 20654)
  • [] Implementar verificações de WebGL em relação a ciclos de feedback (# 21288)
  • [] Implemente verificações de estêncil corretamente (# 20555)
  • [] Inicializar texturas para preto transparente em alguns casos (# 21716)
  • [] Validar a fonte passada para gl.shaderSource() (# 21754)

Implementações pendentes

  • [] Suporte a opção de contexto WebGL de antialiasing (# 21285)
  • [] Suporte para descarte e recriação de contextos WebGL (# 15266)
  • [] Implementar texturas compactadas em WebGL (# 20594)
  • [] Implementar o desenho de uma tela WebGL em uma tela 2D (# 21556)
  • [] Implementar ImageBitmap (# 20650)
  • [] Crie um buffer de desenho menor do que o solicitado quando necessário (# 21718)
  • [] A tela WebGL é dimensionada quando em tela cheia (# 21290)
  • [] Defenda-se adequadamente contra estouros em WebGLRenderingContext.bufferSubData (# 20558)

Outras coisas pendentes e melhorias

  • [] Roube o conhecimento do Firefox sobre a robustez do contexto WebGL (# 21144)
  • [] Suporta adequadamente o atributo estendido WebIDL [AllowShared] (# 20515)
  • [] Cache drawingBufferWidth / drawingBufferHeight em WebGLRenderingContext (# 20530)
  • [] Resultado do cache de WebGLRenderingContext.getContextAttributes (# 20532)
  • [] Não aloque um buffer vazio para nada em WebGLRenderingContext.bufferData (# 20557)
  • [] Remova indireções para parâmetros de textura WebGL (# 20596)
  • [] Limpe a infraestrutura de extensão WebGL (# 20642)
  • [] Talvez apresente uma nova fonte de tarefa específica para WebGL (# 20643)
  • [] Os testes Khronos para WebGL não devem usar um índice no nome do teste (# 20668)
  • [] [Throws] não se aplica por sobrecarga (# 20516)
  • [] Falha ao carregar o sombreador em html5test.com (# 21191)
  • [] A demonstração de água do WebGL não exibe nada (# 21173)
  • [] O Firefox relata limites maiores de "vetores variáveis ​​máximos", "buffer máximo de cores" e "unidades de textura combinadas máximas" do que o Servo (# 21172)
  • [] Investigue aplicativos reais baseados em webgl (# 21151)
  • [] Crie um criador de perfil WebGL (# 21150)

Coisas feitas

  • [x] Verifique se há caracteres inválidos no local WebGL e nomes de atributos (# 21287)
  • [x] Audite o comportamento de WebGLRenderingContext.getProgramInfoLog (# 20561)
  • [x] handle_object_deletion pode estar errado (# 21352)
  • [x] Limpe o framebuffer ao inicializar e redimensionar a tela WebGL (# 21475)
  • [x] Uniões de suporte como parâmetro WebIDL distinto (# 20513)
  • [x] Implementar a sobrecarga texImage2D pendente (# 10443)
  • [x] Implementar copyTexImage2D (# 11147)
  • [x] Implementar copyTexSubImage2D (# 11147)
  • [x] Implementar detachShader (# 10215)
  • [x] Acabamento do implemento (# 10212, # 10215)
  • [x] Implemente 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] Implement 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 corretamente o limite em 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] Apoie IMPLEMENTATION_COLOR_READ_FORMAT e IMPLEMENTATION_COLOR_READ_TYPE (# 20547)
  • [x] Apoie MAX_FRAGMENT_UNIFORM_VECTORS e MAX_VERTEX_UNIFORM_VECTORS (# 20548)
  • [x] Implementar gl.getParameter(gl.MAX_VARYING_VECTORS) (# 20549)
  • [x] Apoie SCISSOR_TEST e 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 corretamente verificações de WebGLRenderingContext.bindBuffer (# 20556)
  • [x] Implementar corretamente as verificações para gl.renderbufferStorage (# 20563)
  • [x] Audite os cheques em WebGLRenderingContext.getFramebufferAttachmentParameter (# 20593)
  • [x] Verifique corretamente o argumento de WebGLRenderingContext.clear (# 20623)
  • [x] Verifique se vinculamos GLclampf corretamente (# 20652)
  • [x] Retorne os tipos corretos em gl.getParameter e amigos (# 20655)
  • [x] Verifique corretamente se os objetos WebGL são passados ​​para o contexto WebGL correto (# 21133)
  • [x] Implementar verificação de alias de atributo em WebGL (# 21136)
  • [x] Corrigir vazamento de dados não inicializados de renderbufferStorage (# 13710)
  • [x] WebGLShader destructor afirma frequentemente ao fechar páginas webgl (# 21177)
  • [x] Verifique novamente nossas validações quando houver vários WebGLRenderingContext s na mesma página.
  • [x] Crie testes para as alterações em # 20598 (# 20607)
  • [x] Faça nossas validações fortemente tipadas (# 10693)
  • [x] Remova indireções para alguns parâmetros WebGL (# 20550)
  • [x] Pare de reexportar WebGLCommand como CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Atualizar nossa dependência de ângulo
  • [x] Teste usando o conjunto de testes de conformidade WebGL (# 10373)
  • [x] Atualize nossa interpretação das especificações para corresponder a outros motores de navegador (# 8753)
  • [x] Armazenar em cache quais recursos de GL do lado do servidor estão ativados (# 20534)
  • [x] Remover indireções para parâmetros de programa WebGL (# 20560)
  • [x] Remova indireções para parâmetros de sombreador WebGL (# 20562)
  • [x] Auditar se o status do framebuffer está devidamente atualizado no WebGL (# 20570)
  • [x] Armazene em cache as informações necessárias para gl.getActiveAttrib e gl.getActiveUniform (# 20600)
  • [x] Informações de cache necessárias para gl.getVertexAttrib e gl.getVertexAttribOffset (# 20608)
  • [x] Somente marque a tela como suja quando nenhum framebuffer estiver vinculado (# 21691)
  • [x] Verifique se o armazenamento do buffer de renderização excede o tamanho máximo do buffer de renderização (# 21485)
  • [x] gl-pointcoord.html não desenha nada (# 21719)
  • [x] oes-texture-half-float.html entra em pânico com um erro GL ao executar no modo desktop (# 21663)
  • [x] Implementar verificação de componente em métodos Image2D (# 20595)
  • [x] Suporte a opção de contexto WebGL de preserveDrawingBuffer (# 21132)
A-contenwebgl B-meta

Comentários muito úteis

Pretendo tentar glGetTexParameter.

Todos 40 comentários

cc @dmarcos

Eu estarei trabalhando na implementação de generateMipmap

@ConnorGBrewster Abri https://github.com/servo/servo/issues/10226, vamos discutir lá :)

Eu gostaria de trabalhar em getActiveUniform

@saurvs Abri https://github.com/servo/servo/issues/10397 para você,

Eu gostaria de trabalhar em todos os métodos uniformes restantes, se estiver tudo bem

@autrilla Eles são seus! Abri https://github.com/servo/servo/issues/10417 para acompanhá-los, fique à vontade para deixar suas perguntas lá :)

Estou olhando para as funções de estêncil *.

Estou tentando arriscar copyTex* e texSubImage2D

Tentando

Implement isShader
Implement isTexture

Eu gostaria de ajudar texSubImage2D

@daoshengmu : parece ótimo!

@danlrobertson , você ainda está trabalhando em texSubImage2D ?

@danlrobertson Desculpe, não percebi que você está trabalhando em texSubImage2D . Eu só quero ajudar na implementação do WebGL. Se você ainda está trabalhando nisso, posso escolher copyTexImage2D e copyTexSubImage2D @emilio

@daoshengmu Sem problemas! Está tudo bem! É ruim para mim demorar tanto para conseguir um PR, mas a vida acontece: sorria: ...

Tudo bem para você levar texSubImage2D ? Já implementei os componentes necessários no wr_traits . Eu deveria ter um PR em breve para copyTex* , mas na verdade eu não tinha começado em texSubImage2D . Se você quer texSubImage2D , vá em frente! Não tenho nenhum apego particular a isso. Só queria aprender um pouco sobre o código webgl ...

@danlrobertson Sure. Vou levar texSubImage2D . Obrigado! 😄

Se estiver tudo bem, vou trabalhar em
Implement isFramebuffer
e
Implement isRenderBuffer

@DDEFISHER vá em frente! Importa-se de abrir um problema para eles para que eu possa designá-lo lá?

Também vou trabalhar em isBuffer pois é semelhante aos outros 2

Por favor, faça um comentário aqui se você pretende trabalhar neste assunto. Obrigado!

Problemas separados para APIs individuais são materiais fáceis de usar; esse não.

Alguém pode apontar para uma implementação E-easy (ish) na qual eu possa trabalhar? Obrigado :)

@ofekd isEnabled pode ser uma boa escolha, uma vez que enable e disable já estão implementados!

@jdm vou levar

@ofekd isEnabled pode ser complicado como um novo contribuidor, porque você precisa mudar as coisas entre os módulos. Alguns dos casos de teste em webgl-specific.html , como as funções de mesclagem ou funções de estêncil, devem ser realmente bons pontos de partida. invalid-passed-params.html provavelmente também tem tarefas fáceis e boas.

@anholt Desde que não seja muito complicado, não me importo de ter que trabalhar um pouco mais. Ainda não comecei a trabalhar nisso, mas, para começar, parece que preciso mudar:

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

A menos que de alguma forma atrapalhe outros esforços, eu continuaria trabalhando em isEnabled

Estarei trabalhando na implementação de validateProgram e getProgramInfoLog

Vou trabalhar em uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv e framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage.

Vou executar demos webgl mais exigentes e medir o desempenho no servo e preciso dessas funções;)

@MortimerGoro Tenho trabalhado no suporte FBO (veja algumas fusões recentes e https://github.com/anholt/servo/tree/webgl-fbo). Também juntei https://github.com/anholt/servo/tree/webgl-uniform-matrix-v para uniformmatrix, mas o teste precisa ser depurado.

@anholt incrível! você precisa de ajuda com o teste de matriz uniforme?

@MortimerGoro apenas descobrindo o que está acontecendo com os resultados não confiáveis.

Abri o número 13639 para rastrear o suporte FBO. Quer adicionar isso a framebufferRenderbuffer / framebufferTexture2D?

@ shravan-achar pode estar interessado em trabalhar nos demais aqui.

Parece que errar toDataURL() para WebGL é a causa de muitos problemas restantes de casos de teste (como asin_001_to_006.html )

Apenas 5 APIs ausentes agora.

eu, @ taki-jaro, @mrowqa e @xanewok trabalharemos neste problema como um projeto de estudante
cc @KiChjang

Pretendo tentar glGetTexParameter.

Trabalhando em getFramebufferAttachmentParameter() .

Eu gostaria de fazer getRenderbufferParameter

Este problema parece não estar mais mantendo um registro de edições por algum motivo.

Edit: Parece estar funcionando agora.

Eu adicionei um monte de problemas.

Esta página foi útil?
0 / 5 - 0 avaliações