Servo: WebGL1.0を完全に実装する

作成日 2016年03月26日  ·  40コメント  ·  ソース: servo/servo

これはメタバグを意図しています。

残りのメソッドの一部はhttps://github.com/servo/servo/issues/5014でブロックされていArrayBufferViewまたはBufferDataSourceを受け取り、オーバーライドがあるメソッド)が、他のメソッドはブロックされる可能性があります問題なく実装されました。

それらのいくつかはE-Easyである可能性があるため、残りの欠陥ごとに個別の問題を提出しようとします。

WebGLバグの一般情報

クリックして展開

スペック

WebGL1.0の仕様はこちらです。

GLES2.0仕様

WebGLはGLES2.0仕様に基づいているため、WebGL仕様は多くの場合詳細を活用します。 PDF版はこちらからご覧いただけます

現在のコード

DOM

WebGLコードのDOM側は、次のファイルにあります。

  • 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スレッド

WebGLスレッドは、DOMからWebGLメッセージを受信し、それを実行するか、WebRenderバックエンドにディスパッチするスレッドです。

ここではおそらく何も触れる必要はありませんが、確認したい場合は、ファイルは次のとおりです。

  • components/canvas/webgl_paint_thread.rs

WebGLコマンドの定義、実行、およびその他のタイプ

残りのWebGL定義とコマンド実装は、ServoとWebRenderの両方で共有するために、 webrender_traitswebgl.rsファイルにあります。

WebGLCommand定義apply関数を確認することをお勧めし

それを積極的に使用するには、 Cargooverrideを使用するのが最善です。

ことを注意WebGLCommandされて再輸出からcanvas_traitsのようにCanvasWebGLMessageレガシーの理由では、(webrenderがまだマージされていなかった一方で、余分なリベースの痛みを避けるため)。

安全チェックがありません

  • []「有効な頂点属性と範囲チェック」を適切に実装する(#20599)
  • []すべてのGLSL制約が適切に実装されていることを確認してください(#20601)
  • []「キューブマップフレームバッファ添付ファイルの完全性」を適切に実装する(#20654)
  • []フィードバックループに対するWebGLチェックを実装する(#21288)
  • []ステンシルチェックを適切に実装する(#20555)
  • []テクスチャを透明な黒に初期化する場合があります(#21716)
  • [] gl.shaderSource()渡されたソースを検証します(#21754)

保留中の実装

  • [] antialiasingのWebGLコンテキストオプションをサポート(#21285)
  • [] WebGLコンテキストの破棄と再作成のサポート(#15266)
  • [] WebGLで圧縮テクスチャを実装する(#20594)
  • [] WebGLキャンバスを2Dキャンバスに描画する実装(#21556)
  • [] ImageBitmap実装する(#20650)
  • []必要に応じて、要求よりも小さい描画バッファを作成します(#21718)
  • [] WebGLキャンバスは、フルスクリーンにすると拡大縮小されます(#21290)
  • [] WebGLRenderingContext.bufferSubData (#20558)のオーバーフローから適切に防御する

その他の保留中のものと改善

  • [] WebGLコンテキストの堅牢性に関するFirefoxの知識を盗む(#21144)
  • [] WebIDL拡張属性[AllowShared]適切にサポートする(#20515)
  • [] drawingBufferWidth / drawingBufferHeightWebGLRenderingContextキャッシュする(#20530)
  • [] WebGLRenderingContext.getContextAttributesキャッシュ結果(#20532)
  • [] WebGLRenderingContext.bufferData (#20557)で空のバッファを何にも割り当てないでください
  • [] WebGLテクスチャパラメータの間接参照を削除します(#20596)
  • [] WebGL拡張インフラストラクチャをクリーンアップします(#20642)
  • [] WebGLに固有の新しいタスクソースを導入するかもしれません(#20643)
  • [] WebGLのKhronosテストでは、テスト名にインデックスを使用しないでください(#20668)
  • [] [Throws]はオーバーロードごとに適用されません(#20516)
  • [] html5test.comにシェーダーをロードするとクラッシュする(#21191)
  • [] WebGLウォーターデモは何も表示しません(#21173)
  • [] Firefoxは、Servo(#21172)よりも大きな「最大変動ベクトル」、「最大カラーバッファー」、および「最大結合テクスチャユニット」の制限を報告します。
  • []実際のwebglベースのアプリを調査する(#21151)
  • [] WebGLプロファイラーを構築する(#21150)

やったこと

  • [x] WebGLの場所と属性名に無効な文字がないか確認してください(#21287)
  • [x] WebGLRenderingContext.getProgramInfoLogの動作を監査する(#20561)
  • [x] handle_object_deletionが間違っている可能性があります(#21352)
  • [x] WebGLキャンバスの初期化およびサイズ変更時にフレームバッファをクリアする(#21475)
  • [x] WebIDLパラメーターを区別するものとして共用体をサポート(#20513)
  • [x]保留中のtexImage2Dオーバーロードを実装します(#10443)
  • [x] copyTexImage2Dを実装する(#11147)
  • [x] copyTexSubImage2Dを実装する(#11147)
  • [x] detachShaderの実装(#10215)
  • [x]仕上げを実装する(#10212、#10215)
  • [x]フラッシュを実装する(#10213、#10215)
  • [x] framebufferRenderbufferの実装(#13639)
  • [x] framebufferTexture2Dを実装する(#13639)
  • [x] generateMipmapを実装します(#10215)
  • [x] getActiveAttribを実装する(#10379)
  • [x] getActiveUniformの実装(#10397)
  • [x] getAttachedShadersの実装(#20411)
  • [x] getFramebufferAttachmentParameterを実装します(#20317)
  • [x] getProgramInfoLogの実装(#13199)
  • [x] getRenderbufferParameterの実装(#20514)
  • [x] getTexParameterの実装(#20144)
  • [x] getShaderPrecisionFormatの実装(#16544)
  • [x] getUniformの実装(#21202)
  • [x] getVertexAttribを実装します
  • [x] getVertexAttribOffsetの実装(#16893)
  • [x] isBufferの実装(#11357)
  • [x] isEnabledの実装(#13040)
  • [x] isFramebufferの実装(#11357)
  • [x] isRenderBufferの実装(#11357)
  • [x] isShaderの実装(#11072)
  • [x] isTextureの実装(#11072)
  • [x] readPixelsを実装する(#10668)
  • [x] renderbufferStorageを実装する(#13872)
  • [x] sampleCoverageを実装します
  • [x] stencilFuncを実装する(#10659)
  • [x] stencilFuncSeparateの実装(#10659)
  • [x] stencilMaskの実装(#10659)
  • [x] stencilMaskSeparateの実装(#10659)
  • [x] stencilOpを実装する(#10659)
  • [x] stencilOpSeparateの実装(#10659)
  • [x] texSubImage2Dを実装する(#11168)
  • [x] uniform1iを実装する(#10417)
  • [x] uniform1ivを実装する(#10417)
  • [x] uniform2fを実装する(#10356)
  • [x] uniform2fvを実装する(#10417)
  • [x] uniform2iを実装する(#10417)
  • [x] uniform2ivを実装する(#10417)
  • [x] uniform3fを実装する(#10417)
  • [x] uniform3fvを実装する(#10417)
  • [x] uniform3iを実装する(#10417)
  • [x] Uniform3ivを実装する(#10417)
  • [x] uniform4iを実装する(#10368)
  • [x] uniform4ivを実装する(#10368)
  • [x] uniformMatrix2fvを実装する(#10671)
  • [x] uniformMatrix3fvを実装する(#10671)
  • [x] uniformMatrix4fvを実装する(#10671)
  • [x] validateProgramの実装(#13199)
  • [x] WebGLRenderingContext.activeTexture制限を適切にチェックします(#20531)
  • [x] gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE)実装する(#20535)
  • [x] gl.getParameter(gl.BLEND_COLOR)実装する(#20536)
  • [x] gl.getParameter(gl.COLOR_CLEAR_VALUE)実装する(#20537)
  • [x] gl.getParameter(gl.COLOR_WRITEMASK)実装する(#20538)
  • [x] gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS)実装する(#20544)
  • [x] gl.getParameter(gl.DEPTH_RANGE)実装する(#20545)
  • [x] gl.getParameter(gl.GENERATE_MIPMAP_HINT)実装する(#20546)
  • [x] IMPLEMENTATION_COLOR_READ_FORMATおよびIMPLEMENTATION_COLOR_READ_TYPEサポート(#20547)
  • [x] MAX_FRAGMENT_UNIFORM_VECTORSおよびMAX_VERTEX_UNIFORM_VECTORSサポート(#20548)
  • [x] gl.getParameter(gl.MAX_VARYING_VECTORS)実装する(#20549)
  • [x] SCISSOR_TESTおよびSCISSOR_BOXサポート(#20551)
  • [x] gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL)実装する(#20552)
  • [x] gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL)実装する(#20553)
  • [x] gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL)実装する(#20554)
  • [x] WebGLRenderingContext.bindBufferチェックを適切に実装する(#20556)
  • [x] gl.renderbufferStorageのチェックを適切に実装する(#20563)
  • [x] WebGLRenderingContext.getFramebufferAttachmentParameterの小切手を監査します(#20593)
  • [x] WebGLRenderingContext.clear (#20623)の引数を適切にチェックしてください
  • [x] GLclampf正しくバインドするかどうかを確認します(#20652)
  • [x] gl.getParameterとその友達に正しいタイプを返す(#20655)
  • [x] WebGLオブジェクトが正しいWebGLコンテキストに渡されていることを適切に確認します(#21133)
  • [x] WebGLで属性エイリアシングチェックを実装する(#21136)
  • [x] renderbufferStorageからの初期化されていないデータ漏洩を修正(#13710)
  • [x] WebGLShaderデストラクタは、webglページを閉じるときに頻繁にアサートします(#21177)
  • [x]同じページに複数のWebGLRenderingContextがある場合は、検証を再確認してください。
  • [x]#20598(#20607)の変更のテストを作成する
  • [x]検証を強く型付けする(#10693)
  • [x]一部のWebGLパラメーターの間接参照を削除します(#20550)
  • [x] WebGLCommandCanvasWebGLMessageとして再エクスポートするのを停止します(https://github.com/servo/servo/issues/10211)
  • [x]角度の依存関係を更新します
  • [x] WebGL適合性テストスイートを使用したテスト(#10373)
  • [x]他のブラウザエンジンと一致するように仕様の解釈を更新します(#8753)
  • [x]サーバー側のGL機能が有効になっているキャッシュ(#20534)
  • [x] WebGLプログラムパラメータの間接参照を削除します(#20560)
  • [x] WebGLシェーダーパラメーターの間接参照を削除します(#20562)
  • [x]フレームバッファステータスがWebGLで適切に更新されていることを監査します(#20570)
  • [x] gl.getActiveAttribgl.getActiveUniform必要な情報をキャッシュする(#20600)
  • [x] gl.getVertexAttribおよびgl.getVertexAttribOffset必要なキャッシュ情報(#20608)
  • [x]フレームバッファがバインドされていない場合にのみ、キャンバスをダーティとしてマークします(#21691)
  • [x]最大レンダーバッファサイズを超えるレンダーバッファストレージを確認します(#21485)
  • [x] gl-pointcoord.htmlは何も描画しません(#21719)
  • [x] oes-texture-half-float.htmlは、デスクトップモードで実行するとGLエラーでパニックになります(#21663)
  • [x] Image2Dメソッドにコンポーネントチェックを実装する(#20595)
  • [x] preserveDrawingBufferのWebGLコンテキストオプションをサポート(#21132)
A-contenwebgl B-meta

最も参考になるコメント

glGetTexParameterを試す予定です。

全てのコメント40件

cc @dmarcos

私はgenerateMipmapの実装に取り​​組んでいます

@ConnorGBrewster https://github.com/servo/servo/issues/10226を開きました、そこで議論しましょう:)

getActiveUniformに取り組みたいのですが

@saurvs https://github.com/servo/servo/issues/10397を開いたので、質問があれば

よろしければ、残りのすべての統一された方法に取り組みたいと思います

@autrilla彼らはあなたのものです! 私はそれらを追跡するためにhttps://github.com/servo/servo/issues/10417を開きました、そこに質問を残してください:)

ステンシル*関数を見ています。

私はcopyTex*texSubImage2Dクラックを取っています

しようとしています

Implement isShader
Implement isTexture

texSubImage2Dを手伝いたい

@daoshengmu :いいですね!

@danlrobertson 、あなたはまだtexSubImage2D取り組んでいますか?

@danlrobertson申し訳ありませんが、 texSubImage2D作業していることに気づきませんtexSubImage2D 。 WebGLの実装を支援したいだけです。 まだ作業中の場合は、 copyTexImage2DcopyTexSubImage2D @ emilioを選択できます

@daoshengmu問題ありません! 大丈夫です! PRを取得するのに時間がかかるのは私の悪いことですが、悲しいかな人生は起こります:笑顔:...

texSubImage2Dを取っても大丈夫ですか? 私はすでにnecesary部品を実装してwr_traits 。 間もなくcopyTex* PRが必要ですが、実際にはtexSubImage2Dから始めていませんtexSubImage2Dが必要な場合は、ぜひお試しください。 特別な愛着はありません。 webglコードについて少し学びたかっただけです...

@danlrobertsonもちろんです。 texSubImage2Dを取ります。 ありがとう! 😄

大丈夫なら私は取り組むつもりです
Implement isFramebuffer

Implement isRenderBuffer

@DDEFISHERはそれのために行きます! 私があなたをそこに割り当てることができるようにそれらのために問題を開くことを気にしますか?

他の2つと似ているので、 isBufferにも取り組み

この問題に取り組むつもりなら、ここにコメントしてください。 ありがとうございました!

個々のAPIの個別の問題は、簡単な資料です。 これじゃない。

誰かが私が取り組むことができるE-easy(ish)実装を指摘できますか? ありがとう :)

@ofekd isEnabledは、 enabledisableがすでに実装されているため、良い選択かもしれません。

@jdm私はそれを取ります

@ofekd isEnabledは、モジュール間で変更する必要があるため、新しい寄稿者としては注意が必要な場合があります。 ブレンド関数やステンシル関数のようなwebgl-specific.htmlのテストケースのいくつかは、本当に良い出発点になるはずです。 invalid-passed-params.htmlは、簡単なタスクも含まれている可能性があります。

@anholtそれほど複雑でない限り、

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

それが他の努力を何らかの形で妨げない限り、私はisEnabled取り組み続けます

私はvalidateProgramとgetProgramInfoLogの実装に取り​​組んでいます

私は、uniformMatrix2fv、uniformMatrix3fv、uniformMatrix4fv、およびframebufferRenderbuffer、framebufferTexture2D、renderbufferStorageで作業します。

より要求の厳しいwebglデモを実行し、サーボのパフォーマンスを測定します。これらの関数が必要です;)

@MortimerGoro私はFBOサポートに取り組んできました(最近のいくつかのマージとhttps://github.com/anholt/servo/tree/webgl-fboを参照してください)。 また、ユニフォームマトリックス用にhttps://github.com/anholt/servo/tree/webgl-uniform-matrix-vをまとめましたが、テストをデバッグする必要があります。

@anholt素晴らしい! ユニフォームマトリックステストについてサポートが必要ですか?

@MortimerGoroは、信頼できない結果で何が起こっているのかを理解しているだけです。

FBOサポートを追跡するために#13639を開きました。 それをframebufferRenderbuffer / framebufferTexture2Dに追加したいですか?

@ shravan-acharは、ここで残りのものに取り組むことに興味があるかもしれません。

WebGLのtoDataURL()誤解が、テストケースの問題がたくさん残っている原因のようです( asin_001_to_006.html

現在、不足しているAPIは5つだけです。

私は、多気JARO、@mrowqa@xanewok @学生プロジェクトとして、この問題に取り組みます
cc @KiChjang

glGetTexParameterを試す予定です。

getFramebufferAttachmentParameter()取り組んでいます。

getRenderbufferParameterをやりたい

この問題は、何らかの理由で編集の記録を保持しなくなったようです。

編集:それは今働いているようです。

たくさんの問題を追加しました。

このページは役に立ちましたか?
0 / 5 - 0 評価