詳しくはこちらのスレッドをご覧ください。
要約すると、次の状況が与えられます。
gl = canvas.getContext('experimental-webgl');
gl.clearColor(0, 0, 0, 1);
gl.colorMask(1, 1, 1, 0);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
gl.enable(gl.BLEND);
...そして標準のレンダリングループ:
function doRender() {
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// render stuff, and request another frame
requestAnimationFrame(doRender);
}
...では、期待される出力が理論的にどうあるべきかを知りたいです。
実際には、最初のフレームがカラー マスクがないかのようにレンダリングされ、2 番目 (以降) のフレームがキャンバス全体を不透明な白でレンダリングすることがわかります。
アルファ レベルがどのように設定されているかは問題ではないことに注意してください。レンダリングされたアルファ値が非常に低い場合でも、2 番目のフレームは常にすぐに完全に白くなります (レンダリングされなかった領域を含む)。
質問: 最初、2 番目、および後続のフレームに対する上記の操作の期待される結果は何ですか? また、私が経験しているのは期待どおりの結果ですか、それとも GL ドライバーまたは WebGL 実装のバグによるものですか? 最後に、それが期待どおりの結果である場合、その理由は何ですか? この結果を生成するためにビデオカードで実際に何が起こっているのでしょうか?
システムの詳細: MacBook Pro / GeForce 320M / Snow Leopard 上の Chrome / Firefox (両方)。