设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2280|回复: 5
打印 上一主题 下一主题

[原创发布] 不规则位图传送/Blt增强

[复制链接]

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2019-10-25 14:57:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 SixRC 于 2019-10-28 17:14 编辑

更新情况在四楼 主楼不想改

不单纯blt矩形 根据mask位图的透明度blt 直接效果图吧 比较好理解

一共是两块内容
一块是 MaskBlt
一块是 BltMask
MaskBlt :
mask_blt(x,y,src,rect,mask,opc = 255)
就是多了一个 mask 这个参数可以直接是位图 也可以是等下的 BltMask 类型
这个mask的大小必须和Rect一致 或者更大 不然会炸的 一般反正就一样就行
根据这个mask各点的透明度来进行blt操作
还有一个mask_blt_reverse 参数是一样的 就是进行了 255 - 透明度的操作
这个函数 进行了多线程加持 而且基于之前我写的很多优化 效率很高
单线程情况耗时大概是原版blt的 13/11
现在一般都有多线程了 那效率就很好henhao了

BltMask :
这块基于 agg(anti grain geometry)
是对位图进行画图的类 就是画线 画多边形 圆等的 还有作一些简单坐标变换的
初始化
RUBY 代码复制
  1. aa = BltMask.new(400, 400)

会新建相应大小的位图 并进行初始化
不需要时请 aa.dispose
这个类作图的逻辑是这样的
加入点 圆 弧线等 然后渲染 渲染会清空之前的点序列
我知道这样说不太好理解 我看agg的时候开始也很迷
比分画线
RUBY 代码复制
  1. aa.move_to(0, 0)
  2. aa.line_to(100, 100)
  3. aa.draw_line

move_to 就是移到那里
line_to 就是画过去
draw_line 就是渲染
画个实心圆
RUBY 代码复制
  1. aa.ellipse(200, 200, 100, 100)
  2. aa.draw_poly

复合也行
RUBY 代码复制
  1. aa.move_to(0, 0)
  2. aa.line_to(100, 100)
  3. aa.ellipse(200,200,100,100)
  4. aa.line_to(400,400)
  5. aa.draw_line

画好了就能当mask_blt的参数 直接传 aa 进去就行
用完了记得 aa.clear 清空位图
下面是所有方法介绍
线相关
弧圆相关
渲染相关
坐标转换
其他
线段衔接柔化

如上
一般就是 设置好mask 然后mask_blt
示例没有 自己试着玩吧
下面代码
MaskBlt
BltMask

插到随便什么地方
MaskBlt.zip (236.58 KB, 下载次数: 67)
解压到文件目录

就这样

评分

参与人数 2星屑 +500 +1 收起 理由
hyrious + 1 塞糖
fux2 + 500 精品文章

查看全部评分

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39660
在线时间
7484 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

2
发表于 2019-10-26 10:57:41 | 只看该作者
相当方便了(用造好的就是舒服

点评

谢谢大黄鸡!  发表于 2019-10-26 12:46
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20945
在线时间
9333 小时
注册时间
2012-6-19
帖子
7106

开拓者短篇九导演组冠军

3
发表于 2019-10-26 21:57:24 | 只看该作者
本帖最后由 喵呜喵5 于 2019-10-26 22:45 编辑

哇,先开个工程试试看

=======

又能鼓捣出一些新玩意儿了~
如果rect也能支持这个mask就好了……





点评

配图无敌了... 涉及到Rect的地方对Rect的使用方式都不同 毕竟原设计上rect就是四个简单量的替代吧 并不是很重要 要改就得把所有地方都改啦  发表于 2019-10-26 23:06
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

4
 楼主| 发表于 2019-10-28 17:12:40 | 只看该作者
发个更新贴 以后若更新会改在这里
一是考虑到mask其实大部分像素alpha都是0 所以加了判断 牺牲微不足道的效率(~%6) 可以获得成倍的速度提升
二是毕竟牺牲了一些  所以就对其作了进一步优化
方式是手写了汇编
原先编译器优化的代码比较 诡异 和我写的思路不太一致
和它斗智斗勇半天 它还是不懂我 我累了 就直接汇编了
结果 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
耗时降低了约 42%
加上第一个修改 综合耗时看情况约是原先的 30%~60% 基本是快了一番
所以是 重 大 的 版本更新
MaskBlt_v11.zip (39.98 KB, 下载次数: 45)
替换原来的 MaskBlt.dll 就行啦
现在基本上没啥好更新的了 冬眠了

评分

参与人数 2+2 收起 理由
VIPArcher + 1 塞糖
hyrious + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-25 20:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表