lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7606|回复: 8
打印 上一主题 下一主题

drawTriangles的问题

[复制链接]

9

主题

0

好友

117

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2016-12-26 14:45:55 |只看该作者 |倒序浏览
大神,我drawTriangles后绘制到图片,火狐耗时100ms ,而 chrome耗时10000ms,不知道是那个地方出现问题
单独写个测试程序又没有什么问题,不知道你知不知道是什么原因
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2016-12-26 16:39:00 |只看该作者
兄弟啊,你连个代码都不给,我哪儿知道你哪里出了问题啊....
不回答与技术和引擎不相关的问题
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

板凳
发表于 2016-12-26 16:51:54 |只看该作者
<script>
        var start = 0,
                end=0;

function main() {
        LGlobal.setDebug(true);
        var loadList=[
                {
                        name: 'flat',
                        path: 'http://192.168.1.88/test/20150421172713993125.png'
                        //形状图
                },
                {
                        name: 'img',
                        path: 'http://192.168.1.88/test/20150403150850798922.jpg'
                        //覆盖图
                }
               
        ];
        LLoadManage.load(loadList, function() {}, function(result) {
                var imgBitmapdata=new LBitmapData(result['img']);
                var imgBitmap=new LBitmap(imgBitmapdata);


                var flatBitmapdata=new LBitmapData(result['flat']);
                var flatBitmap=new LBitmap(flatBitmapdata);
                var flatLayer=new LSprite();
                flatLayer.addChild(flatBitmap);
                imgBitmap.blendMode = LBlendMode.SOURCE_IN;
                flatLayer.addChild(imgBitmap);

                var newBitmapdata = new LBitmapData(null, 0, 0, flatLayer.getWidth(), flatLayer.getHeight(), LBitmapData.DATA_CANVAS);
                newBitmapdata.draw(flatLayer);

                start=new Date().getTime();//开始计时

                //执行变形
                imgLayer = new LSprite();
                imgLayer.graphics.clear();
                imgLayer.graphics.beginBitmapFill(newBitmapdata);
                var vertices=[0,0,0,482,454,0,454,482];
                var indices=[0,2,1,2,1,3];
                var uvtData=[0,0,0,1,1,0,1,1];
                imgLayer.graphics.drawTriangles(vertices, indices, uvtData);
               
               
                var layer = new LSprite();
                layer.graphics.drawRect(0, "#000000", [0, 0, 191, 274]);
                layer.addChild(imgLayer);

                var bitmapdata = new LBitmapData(null, 0, 0, 191, 274, LBitmapData.DATA_CANVAS);
                bitmapdata.draw(layer);

                var bitmap = new LBitmap(bitmapdata);
                addChild(bitmap);

                end = new Date().getTime();//结束计时
                trace(end - start);//输出
        });
}


init(50, 'legend', 1200, 1200, main); </script>
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

地板
发表于 2016-12-26 16:54:00 |只看该作者
这是我的代码,执行最简单的变形,chrome 耗时50ms左右,而火狐只需要2ms左右
你可以执行看下,图片地址要换
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

5#
发表于 2016-12-26 16:54:17 |只看该作者
这是我的代码,执行最简单的变形,chrome 耗时50ms左右,而火狐只需要2ms左右
你可以执行看下,图片地址要换
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

6#
发表于 2016-12-26 16:54:33 |只看该作者
本帖最后由 donnier 于 2016-12-26 17:02 编辑

不好意思,点多了
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2016-12-26 21:38:39 |只看该作者
donnier 发表于 2016-12-26 16:54
不好意思,点多了

试了试,确实firefox比chrome要快一些
这个没办法,结果只能说明clip这个函数,目前在firefox下比chrome要更快
不回答与技术和引擎不相关的问题
回复

使用道具 举报

9

主题

0

好友

117

积分

士兵

Rank: 1

8#
发表于 2016-12-27 09:00:22 |只看该作者
但是,如果我把代码改成这样,效率上chrome比火狐快,不知道怎么回事,因为我需要上面哪种方式,大神知道怎么改进吗
<script>
        var start = 0,
                end=0;

function main() {
        LGlobal.setDebug(true);
        var loader = new LLoader();
        loader.addEventListener(LEvent.COMPLETE, function(event) {
                var imgBitmapdata = new LBitmapData(event.target);

                start=new Date().getTime();
                var imgLayer = new LSprite();
                imgLayer.graphics.clear();
                imgLayer.graphics.beginBitmapFill(imgBitmapdata);

                var vertices=[0,0,0,482,454,0,454,482];
                var indices=[0,2,1,2,1,3];
                var uvtData=[0,0,0,1,1,0,1,1];
                imgLayer.graphics.drawTriangles(vertices, indices, uvtData);
               
                var layer = new LSprite();
                layer.graphics.drawRect(0, "#000000", [0, 0, 191, 274]);
                layer.addChild(imgLayer);

                var bitmapdata = new LBitmapData(null, 0, 0, 191, 274, LBitmapData.DATA_CANVAS);
                bitmapdata.draw(layer);

               
                var bitmap = new LBitmap(bitmapdata);
                addChild(bitmap);
                end = new Date().getTime();
                trace(end - start);
               

        });
        loader.load('http://192.168.1.88/test/4B3D9D0D9596683EA01C9D7BF2CEB00F.png', 'bitmapData');
}


init(50, 'legend', 1200, 1200, main); </script>
回复

使用道具 举报

37

主题

8

好友

9313

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

9#
发表于 2016-12-27 09:23:39 |只看该作者
donnier 发表于 2016-12-27 09:00
但是,如果我把代码改成这样,效率上chrome比火狐快,不知道怎么回事,因为我需要上面哪种方式,大神知道怎 ...

你两次传入beginBitmapFill的参数,一个是LBitmapData.DATA_CANVAS形式,一个是LBitmapData.DATA_IMAGE形式,虽然这两种形式canvas都支持,但是毕竟是绘制不同类型的对象,说白了的话,一个是canvas标签,一个是img标签,canvas在绘制这两个对象的时候,浏览器内部的处理肯定是不同的,效率自然也不同,而各自的浏览器擅长处理什么样的对象,这个就是浏览器自己的事情了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-8 16:32 , Processed in 0.051790 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部