Even Firefox's implementation is inconsistent.<div><br></div><div>drawShape uses the "<span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse">infinite transparent black bitmap" but drawImage does not.</span></div>

<div><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse"><br></span></div><div><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse">I believe even many at Mozilla would like Firefox to switch to the Chrome/Safari method because it's more easily GPU accelerated.</span></div>

<div><span style="font-family:arial, sans-serif;font-size:13px;border-collapse:collapse"><br></span></div><div><font face="arial, sans-serif"><span style="border-collapse:collapse">In that direction it would be nice if 2 things in the spec changed</span></font></div>

<div><font face="arial, sans-serif"><span style="border-collapse:collapse"><br></span></font></div><div><font face="arial, sans-serif"><span style="border-collapse:collapse">#1) Get rid of the "infinite transparent black bitmap" stuff and change it to something that say only pixels inside the shape/image are effected</span></font></div>
<div><font face="arial, sans-serif"><span style="border-collapse:collapse"><br></span></font></div><div><font face="arial, sans-serif"><span style="border-collapse:collapse">#2) Change the globalCompositingOperation spec from referencing PORTER-DUFF to referencing OpenGL</span></font></div>
<div><font face="arial, sans-serif"><span style="border-collapse:collapse"><br></span></font></div><div><font face="arial, sans-serif"><span style="border-collapse:collapse"><span class="Apple-style-span" style="font-size: 13px; "><div>
<span class="il" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(219, 240, 250); ">source-over</span></div><div>   glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);</div>
<div>  </div><div>source-in</div><div class="im"><div>   glBlendFunc(GL_DST_ALPHA, GL_ZERO); </div><div><br></div></div><div>source-out</div><div>   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ZERO);</div><div>  </div><div>source-atop</div>
<div>   glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);</div><div>  </div><div>destination-over</div><div>   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);</div><div>  </div><div>destination-in</div><div class="im"><div>
   glBlendFunc(GL_ZERO, GL_SRC_ALPHA)</div><div><br></div></div><div>destination-out</div><div>   glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);</div><div>  </div><div>destination-atop</div><div>   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA);</div>
<div>  </div><div>lighter</div><div>   glBlendFunc(GL_ONE, GL_ONE);</div><div>  </div><div>darker</div><div>   deprecated</div><div>  </div><div>copy</div><div>   glBlendFunc(GL_ONE, GL_ZERO);</div><div>  </div><div>xor</div>
<div>   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);</div></span></span></font></div>