Servo: Sepenuhnya menerapkan WebGL 1.0

Dibuat pada 26 Mar 2016  ·  40Komentar  ·  Sumber: servo/servo

Ini dimaksudkan sebagai meta-bug.

Beberapa metode yang tersisa diblokir di https://github.com/servo/servo/issues/5014 (metode yang menerima ArrayBufferView atau BufferDataSource dan telah diganti), tetapi beberapa metode lainnya dapat dilaksanakan tanpa masalah.

Saya akan mencoba mengajukan masalah individual untuk setiap kekurangan yang tersisa, karena beberapa di antaranya dapat berupa E-Easy .

Informasi umum untuk bug WebGL

Klik untuk memperluas

spesifikasi

Spesifikasi WebGL 1.0 ada di sini .

Spesifikasi GLES 2.0

WebGL didasarkan pada spesifikasi GLES 2.0, sehingga spesifikasi WebGL sering kali memanfaatkan detailnya. Anda dapat menemukan versi PDF di sini .

Kode saat ini

DOM

Sisi DOM dari kode WebGL dapat ditemukan di file berikut:

  • 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

utas WebGL

Utas WebGL adalah utas yang menerima pesan WebGL dari DOM, dan menjalankannya atau mengirimkannya ke backend WebRender.

Anda mungkin tidak perlu menyentuh apa pun di sini, tetapi jika Anda ingin melihatnya, file tersebut adalah:

  • components/canvas/webgl_paint_thread.rs

Definisi perintah WebGL, eksekusi, dan jenis lainnya

Definisi WebGL lainnya dan implementasi perintah ada di file webrender_traits webgl.rs , untuk dibagikan oleh Servo dan WebRender.

Anda akan ingin melihat definisi WebGLCommand dan ke fungsi apply .

Untuk bekerja secara aktif dengannya yang terbaik adalah dengan menggunakan Cargo override .

Perhatikan bahwa WebGLCommand diekspor ulang dari canvas_traits sebagai CanvasWebGLMessage untuk alasan warisan (untuk menghindari rasa sakit rebase tambahan saat webrender belum bergabung).

Tidak ada pemeriksaan keamanan

  • [ ] Menerapkan dengan benar "Atribut Vertex yang Diaktifkan dan Pemeriksaan Rentang" (#20599)
  • [ ] Periksa apakah kami menerapkan semua batasan GLSL dengan benar (#20601)
  • [ ] Menerapkan dengan benar "Kelengkapan Lampiran Framebuffer Peta Kubus" (#20654)
  • [ ] Menerapkan pemeriksaan WebGL terhadap loop umpan balik (#21288)
  • [ ] Terapkan pemeriksaan stensil dengan benar (#20555)
  • [ ] Inisialisasi tekstur menjadi hitam transparan dalam beberapa kasus (#21716)
  • [ ] Validasi sumber yang diteruskan ke gl.shaderSource() (#21754)

Implementasi yang tertunda

  • [ ] Mendukung opsi konteks WebGL antialiasing (#21285)
  • [ ] Mendukung penghapusan dan pembuatan ulang konteks WebGL (#15266)
  • [ ] Menerapkan tekstur terkompresi di WebGL (#20594)
  • [ ] Menerapkan menggambar kanvas WebGL menjadi kanvas 2D (#21556)
  • [ ] Terapkan ImageBitmap (#20650)
  • [ ] Buat buffer gambar yang lebih kecil dari yang diminta bila perlu (#21718)
  • [ ] Kanvas WebGL diskalakan saat dibuat layar penuh (#21290)
  • [ ] Bertahan dengan benar terhadap luapan di WebGLRenderingContext.bufferSubData (#20558)

Hal-hal lain yang tertunda dan peningkatan

  • [ ] Curi pengetahuan Firefox tentang ketahanan konteks WebGL (#21144)
  • [ ] Mendukung atribut perluasan WebIDL dengan benar [AllowShared] (#20515)
  • [ ] Tembolok drawingBufferWidth / drawingBufferHeight di WebGLRenderingContext (#20530)
  • [ ] Hasil cache dari WebGLRenderingContext.getContextAttributes (#20532)
  • [ ] Jangan mengalokasikan buffer kosong untuk apa pun di WebGLRenderingContext.bufferData (#20557)
  • [ ] Hapus tipuan untuk parameter tekstur WebGL (#20596)
  • [ ] Bersihkan infrastruktur ekstensi WebGL (#20642)
  • [ ] Mungkin memperkenalkan sumber tugas baru khusus untuk WebGL (#20643)
  • [ ] Tes Khronos untuk WebGL tidak boleh menggunakan indeks dalam nama tes (#20668)
  • [ ] [Throws] tidak berlaku per-overload (#20516)
  • [ ] Crash saat memuat shader di html5test.com (#21191)
  • [ ] Demo air WebGL tidak menampilkan apa pun (#21173)
  • [ ] Firefox melaporkan batas "vektor variasi maksimum", "penyangga warna maksimum", dan "unit tekstur gabungan maksimum" lebih besar daripada Servo (#21172)
  • [ ] Selidiki aplikasi berbasis webgl nyata (#21151)
  • [ ] Buat profiler WebGL (#21150)

Selesai

  • [x] Periksa karakter yang tidak valid di lokasi WebGL dan nama atribut (#21287)
  • [x] Audit perilaku WebGLRenderingContext.getProgramInfoLog (#20561)
  • [x] handle_object_deletion mungkin salah (#21352)
  • [x] Hapus framebuffer saat menginisialisasi dan mengubah ukuran kanvas WebGL (#21475)
  • [x] Mendukung serikat pekerja sebagai parameter WebIDL yang membedakan (#20513)
  • [x] Menerapkan kelebihan texImage2D yang tertunda (#10443)
  • [x] Menerapkan copyTexImage2D (#11147)
  • [x] Menerapkan copyTexSubImage2D (#11147)
  • [x] Menerapkan detachShader (#10215)
  • [x] Implementasi selesai (#10212, #10215)
  • [x] Menerapkan flush (#10213, #10215)
  • [x] Menerapkan framebufferRenderbuffer (#13639)
  • [x] Menerapkan framebufferTexture2D (#13639)
  • [x] Implementasikan generateMipmap (#10215)
  • [x] Terapkan getActiveAttrib (#10379)
  • [x] Terapkan getActiveUniform (#10397)
  • [x] Menerapkan getAttachedShaders (#20411)
  • [x] Menerapkan getFramebufferAttachmentParameter (#20317)
  • [x] Terapkan getProgramInfoLog (#13199)
  • [x] Menerapkan getRenderbufferParameter (#20514)
  • [x] Menerapkan getTexParameter (#20144)
  • [x] Menerapkan getShaderPrecisionFormat (#16544)
  • [x] Menerapkan getUniform (#21202)
  • [x] Implementasikan getVertexAttrib
  • [x] Menerapkan getVertexAttribOffset (#16893)
  • [x] Menerapkan isBuffer (#11357)
  • [x] Implementasi diaktifkan (#13040)
  • [x] Menerapkan isFramebuffer (#11357)
  • [x] Menerapkan isRenderBuffer (#11357)
  • [x] Menerapkan isShader (#11072)
  • [x] Menerapkan isTexture (#11072)
  • [x] Menerapkan readPixels (#10668)
  • [x] Menerapkan renderbufferStorage (#13872)
  • [x] Terapkan sampleCoverage
  • [x] Menerapkan stencilFunc (#10659)
  • [x] Menerapkan stencilFuncSeparate (#10659)
  • [x] Menerapkan stencilMask (#10659)
  • [x] Menerapkan stencilMaskSeparate (#10659)
  • [x] Menerapkan stencilOp (#10659)
  • [x] Menerapkan stencilOpSeparate (#10659)
  • [x] Menerapkan texSubImage2D (#11168)
  • [x] Menerapkan uniform1i (#10417)
  • [x] Menerapkan uniform1iv (#10417)
  • [x] Menerapkan uniform2f (#10356)
  • [x] Menerapkan uniform2fv (#10417)
  • [x] Menerapkan uniform2i (#10417)
  • [x] Menerapkan uniform2iv (#10417)
  • [x] Menerapkan uniform3f (#10417)
  • [x] Menerapkan uniform3fv (#10417)
  • [x] Menerapkan uniform3i (#10417)
  • [x] Menerapkan uniform3iv (#10417)
  • [x] Menerapkan uniform4i (#10368)
  • [x] Menerapkan uniform4iv (#10368)
  • [x] Menerapkan uniformMatrix2fv (#10671)
  • [x] Menerapkan uniformMatrix3fv (#10671)
  • [x] Menerapkan uniformMatrix4fv (#10671)
  • [x] Terapkan program validasi (#13199)
  • [x] Periksa batas dengan benar di WebGLRenderingContext.activeTexture (#20531)
  • [x] Terapkan gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE) (#20535)
  • [x] Terapkan gl.getParameter(gl.BLEND_COLOR) (#20536)
  • [x] Terapkan gl.getParameter(gl.COLOR_CLEAR_VALUE) (#20537)
  • [x] Terapkan gl.getParameter(gl.COLOR_WRITEMASK) (#20538)
  • [x] Terapkan gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS) (#20544)
  • [x] Terapkan gl.getParameter(gl.DEPTH_RANGE) (#20545)
  • [x] Terapkan gl.getParameter(gl.GENERATE_MIPMAP_HINT) (#20546)
  • [x] Mendukung IMPLEMENTATION_COLOR_READ_FORMAT dan IMPLEMENTATION_COLOR_READ_TYPE (#20547)
  • [x] Mendukung MAX_FRAGMENT_UNIFORM_VECTORS dan MAX_VERTEX_UNIFORM_VECTORS (#20548)
  • [x] Terapkan gl.getParameter(gl.MAX_VARYING_VECTORS) (#20549)
  • [x] Mendukung SCISSOR_TEST dan SCISSOR_BOX (#20551)
  • [x] Terapkan gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL) (#20552)
  • [x] Terapkan gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL) (#20553)
  • [x] Terapkan gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL) (#20554)
  • [x] Terapkan pemeriksaan WebGLRenderingContext.bindBuffer (#20556)
  • [x] Terapkan pemeriksaan dengan benar untuk gl.renderbufferStorage (#20563)
  • [x] Audit cek di WebGLRenderingContext.getFramebufferAttachmentParameter (#20593)
  • [x] Periksa argumen WebGLRenderingContext.clear (#20623)
  • [x] Periksa apakah kita mengikat GLclampf dengan benar (#20652)
  • [x] Kembalikan jenis yang benar di gl.getParameter dan teman (#20655)
  • [x] Periksa dengan benar apakah objek WebGL diteruskan ke konteks WebGL yang benar (#21133)
  • [x] Terapkan pemeriksaan aliasing atribut di WebGL (#21136)
  • [x] Perbaiki kebocoran data yang tidak diinisialisasi dari renderbufferStorage (#13710)
  • [x] WebGLShader destructor sering menegaskan saat menutup halaman webgl (#21177)
  • [x] Periksa kembali validasi kami ketika ada beberapa WebGLRenderingContext s di halaman yang sama.
  • [x] Buat tes untuk perubahan di #20598 (#20607)
  • [x] Buat validasi kami diketik dengan kuat (#10693)
  • [x] Hapus tipuan untuk beberapa parameter WebGL (#20550)
  • [x] Berhenti mengekspor ulang WebGLCommand sebagai CanvasWebGLMessage (https://github.com/servo/servo/issues/10211)
  • [x] Perbarui ketergantungan sudut kami
  • [x] Uji menggunakan rangkaian uji kesesuaian WebGL (#10373)
  • [x] Perbarui interpretasi kami tentang spesifikasi agar sesuai dengan mesin browser lain (#8753)
  • [x] Cache kemampuan GL sisi server mana yang diaktifkan (#20534)
  • [x] Hapus tipuan untuk parameter program WebGL (#20560)
  • [x] Hapus tipuan untuk parameter shader WebGL (#20562)
  • [x] Audit bahwa status framebuffer diperbarui dengan benar di WebGL (#20570)
  • [x] Tembolok info yang diperlukan untuk gl.getActiveAttrib dan gl.getActiveUniform (#20600)
  • [x] Info cache diperlukan untuk gl.getVertexAttrib dan gl.getVertexAttribOffset (#20608)
  • [x] Hanya tandai kanvas sebagai kotor jika tidak ada framebuffer yang terikat (#21691)
  • [x] Periksa apakah penyimpanan renderbuffer melebihi ukuran maksimum renderbuffer (#21485)
  • [x] gl-pointcoord.html tidak menggambar apa pun (#21719)
  • [x] oes-texture-half-float.html panik dengan kesalahan GL saat dijalankan dalam mode desktop (#21663)
  • [x] Terapkan pemeriksaan komponen dalam metode Image2D (#20595)
  • [x] Mendukung opsi konteks WebGL preserveDrawingBuffer (#21132)
A-contenwebgl B-meta

Komentar yang paling membantu

Saya berencana untuk mencoba glGetTexParameter.

Semua 40 komentar

cc @dmarcos

Saya akan bekerja untuk mengimplementasikan generateMipmap

@ConnorGBrewster saya membuka https://github.com/servo/servo/issues/10226, mari kita bahas di sana :)

Saya ingin mengerjakan getActiveUniform

@saurvs Saya membuka https://github.com/servo/servo/issues/10397 untuk Anda, jangan ragu untuk mengajukan pertanyaan apa pun yang mungkin Anda miliki di sana :)

Saya ingin mengerjakan semua metode seragam yang tersisa, jika tidak apa-apa

@autrilla Mereka milikmu! Saya telah membuka https://github.com/servo/servo/issues/10417 untuk melacaknya, jangan ragu untuk meninggalkan pertanyaan di sana :)

Saya sedang melihat fungsi stensil*.

Saya mengambil celah di copyTex* dan texSubImage2D

Mencoba

Implement isShader
Implement isTexture

Saya ingin membantu texSubImage2D

@daoshengmu : kedengarannya bagus!

@danlrobertson , apakah Anda masih mengerjakan texSubImage2D ?

@danlrobertson Maaf karena saya tidak melihat Anda sedang mengerjakan texSubImage2D . Saya hanya ingin membantu beberapa implementasi WebGL. Jika Anda masih mengerjakannya, saya dapat memilih copyTexImage2D dan copyTexSubImage2D @emilio

@daoshengmu Tidak masalah! Tidak apa-apa! Ini buruk bagi saya untuk mengambil begitu lama untuk mendapatkan PR, tapi sayangnya hidup terjadi : tersenyum:...

Apakah Anda setuju dengan mengambil texSubImage2D ? Saya sudah menerapkan komponen yang diperlukan di wr_traits . Saya seharusnya memiliki PR segera untuk copyTex* , tetapi saya sebenarnya belum memulai texSubImage2D . Jika Anda ingin texSubImage2D , lakukanlah! Saya tidak memiliki keterikatan khusus dengannya. Hanya ingin belajar sedikit tentang kode webgl...

@danlrobertson Tentu. Saya akan mengambil texSubImage2D . Terima kasih! 😄

Kalau oke saya akan kerjakan
Implement isFramebuffer
dan
Implement isRenderBuffer

@DDEFISHER lakukan! Keberatan membuka masalah untuk itu sehingga saya dapat menugaskan Anda di sana?

Saya juga akan mengerjakan isBuffer karena mirip dengan 2 lainnya

Silakan beri komentar di sini jika Anda berniat untuk mengerjakan masalah ini. Terima kasih!

Masalah terpisah untuk masing-masing API adalah materi E-easy; ini bukan.

Adakah yang bisa menunjukkan implementasi E-easy(ish) yang bisa saya kerjakan? Terima kasih :)

@ofekd isEnabled mungkin merupakan pilihan yang baik, karena enable dan disable sudah diterapkan!

@jdm saya akan mengambilnya

@ofekd isEnabled mungkin rumit sebagai kontributor baru, karena Anda perlu mengubah banyak hal di seluruh modul. Beberapa testcase dalam webgl-specific.html , seperti fungsi blending atau fungsi stensil, harus menjadi titik awal yang sangat baik. invalid-passed-params.html kemungkinan juga memiliki tugas mudah yang bagus.

@anholt Selama itu tidak terlalu rumit, saya tidak keberatan harus bekerja lagi. Saya belum mulai mengerjakan ini, tetapi sebagai permulaan sepertinya saya perlu mengubah:

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

Kecuali jika itu menghalangi upaya lain, saya akan terus mengerjakan isEnabled

Saya akan bekerja untuk mengimplementasikan validasiProgram dan getProgramInfoLog

Saya akan bekerja di uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv dan framebufferRenderbuffer, framebufferTexture2D, renderbufferStorage.

Saya akan menjalankan demo webgl yang lebih menuntut dan mengukur kinerja pada servo dan saya membutuhkan fungsi-fungsi itu;)

@MortimerGoro Saya telah mengerjakan dukungan FBO (lihat beberapa penggabungan baru-baru ini, dan https://github.com/anholt/servo/tree/webgl-fbo). Saya juga mengumpulkan https://github.com/anholt/servo/tree/webgl-uniform-matrix-v untuk uniformmatrix, tetapi pengujian perlu di-debug.

@anholt luar biasa! apakah Anda memerlukan bantuan dengan pengujian uniformmatrix?

@MortimerGoro hanya mencari tahu apa yang terjadi dengan hasil yang tidak dapat diandalkan.

Saya telah membuka #13639 untuk melacak dukungan FBO. Ingin menambahkannya ke framebufferRenderbuffer/framebufferTexture2D?

@shravan-achar mungkin tertarik untuk mengerjakan yang tersisa di sini.

Sepertinya kehilangan toDataURL() untuk WebGL adalah penyebab dari banyak masalah kasus uji yang tersisa (seperti asin_001_to_006.html )

Hanya 5 API yang hilang sekarang.

saya, @taki-jaro, @mrowqa dan @xanewok akan mengerjakan masalah ini sebagai proyek siswa
cc @KiChjang

Saya berencana untuk mencoba glGetTexParameter.

Bekerja pada getFramebufferAttachmentParameter() .

Saya ingin melakukan getRenderbufferParameter

Masalah ini sepertinya tidak lagi menyimpan catatan pengeditan karena beberapa alasan.

Sunting: Tampaknya berfungsi sekarang.

Saya menambahkan banyak masalah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

larsbergstrom picture larsbergstrom  ·  3Komentar

ayelen912 picture ayelen912  ·  3Komentar

kmcallister picture kmcallister  ·  4Komentar

ferjm picture ferjm  ·  3Komentar

roberto68 picture roberto68  ·  3Komentar