最新版的 chromium. 已经修复了这个bug
经过进一步测试 出现此问题的绝大多数是A卡
=======================================
新版chrome 为我们带来了GPU加速.
但是chrome的GPU加速一直问题多多.
例如 开启之后速度反而变慢.
最近我开发的一个HTML5游戏引擎 在chrome中开启 GPU Accelerated Canvas 2D 后,
画面更是完全乱掉.
花了很多时间去排查到底是我的程序有了问题 还是chrome的问题
,如果是chrome的问题, 那么到底是哪部分出了问题.
最近终于被我找到了, 原来是 clearRect 开启 GPU Accelerated Canvas 2D 后, 无法正常工作, 会出现"清除了不该清除的区域,而该清除的却没有清除".
我写了一个具体的例子之后发现, 清除区域居然发生了垂直翻转.
(该例子 先将画布涂黑, 然后调用clearRect清除一些区域,清除的区域变透明).
这么说可能不容易理解, 看图吧:
左边是其他支持HTML5 canvas的浏览器 以及 chrome关闭GPU加速后的正确结果.
右边则是开启GPU加速后 chrome的错误结果.
观察图片不能得出"发生了垂直翻转"的结论.
测试代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<title>Test</title>
<script type="text/javascript">
var clearData=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,8,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,8,8,0],
[0,8,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,8,8,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,8,8,0,0,0,0,0,8,8,8,8,0,0,0,0,0,0,0,8,8,0,0,0,0],
[0,0,0,0,8,8,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,8,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,0],
[0,0,0,8,8,8,0,0,0,0,8,8,0,0,0,0,8,8,0,0,0,0,8,8,8,0,0,0],
[0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0],
[0,0,0,8,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,8,0,0,0],
[0,8,8,8,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,0,0,0,8,8,8,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
]
function testCanvasClearRect(){
var rectSize=16;
var rows=clearData.length;
var cols=clearData[0].length;
var canvas = document.getElementById("canvas1");
canvas.width= cols * rectSize ;
canvas.height= rows * rectSize ;
var ctx= canvas.getContext('2d');
// fill background with default color (black);
ctx.fillRect(0, 0, canvas.width, canvas.height );
for ( var r=0;r<rows;r++){
for ( var c=0;c<cols;c++){
var no=clearData[r][c];
var nx= c * rectSize;
var ny= r * rectSize;
// if the number in the array === 0 , call clearRect
if (no === 0 ){
ctx.clearRect(nx,ny, rectSize, rectSize);
}
}
}
}
function init(){
testCanvasClearRect()
}
</script>
</head>
<body onload="init()" >
<canvas id="canvas1" style="border:1px solid blue;" ></canvas>
</body>
</html>
分享到:
相关推荐
讲解使用canvas.save()和canvas.restore()的demo
canvas.text.js
创建一个从javascript函数转换而来的GPU加速内核,该javascript函数计算512 x 512矩阵(2D数组)中的单个元素。 内核功能是在GPU上串联运行的,通常会导致非常快速的计算! 您可以在运行基准测试。 通常,根据硬件...
Canvas2DtoWebGL.js Canvas2DtoWebGL.js 将几乎所有方法从 HTML5 的常规 Canvas2D 上下文 (CanvasRenderingContext2D) 移植到 WebGL 调用,这允许在 2D Canvas 中混合 3D 或相反(创建 GUI、调试信息等),并且在...
jsPdf.debug.js和html2canvas.js下载jsPdf.debug.js和html2canvas.js下载jsPdf.debug.js和html2canvas.js下载jsPdf.debug.js和html2canvas.js下载
基于canvas 2D(高性能)实现微信小程序自定义组件-环形进度条 可定义大小,颜色,渐变等,也可自行扩展更多属性
html2canvas.min.js的源码,方便大家下载
Leaflet.Canvas-Markers-0.2.0 https://github.com/corg/Leaflet.Canvas-Markers
1、老版微信小程序canvas微信官方已经发声不再维护。 2、新版canvas2d海报,官方文档比较乱,开发起来难度大。 3、canvas2d生成海报效率高,资源开资少,性能强。 4、普通canvas生成海报比canvas2d稍慢。 5、通过...
用canvas在不规则四边形上绘制图片
Genome2D, 2D GPU框架 Genome2D什么是 Genome2D?Genome2D是一个面向游戏开发的多平台 2D GPU框架。 它使用 Haxe面向对象编程语言构建,使它能够部署到多个目标。 目前,Genome2D支持使用WebGL和Canvas回退和 F
Canvas2D introduction.pptx
使用新版canvas-2d接口在微信小程序中生成二维码(外部二维码)的js包
flashcanvas.min.js flashcanvas.min.js flashcanvas.min.js flashcanvas.min.js
html2canvas.js 和html2canvas.min.js 以及应用示例
根据W3C官方的Canvas 2D API Specification 1.0整理编译成的帮助文档,按章节进行分页,增加了翻页和返回链接,方便查阅。是W3C正式公开的第一个草案版本。
可以是用来在网页上面截屏的代码:html2canvas.js;基于html2canvas实现网页保存为图片。
APNG经过修改后,在QT,浏览器上可用的apng-canvas.js 参考博客使用:http://blog.csdn.net/ly305750665/article/details/77972415
Canvas2D基础讲义