MS RFC 113:层合成管道¶
- 日期
2015年2月
- 作者
托马斯堡
- 联系方式
- 状态
实施
- 版本
MAPServer 7
1。动机¶
一些制图渲染将受益于高级混合模式的添加,如http://en.wikipedia.org/wiki/blend_models中详细解释的那样。特别是,此功能对于在矢量曲面上更愉快地渲染栅格阴影至关重要。
2。建议的增强¶
图层->不透明度功能将替换为一个或多个图层->复合块,用于定义应使用哪种合成模式将当前图层混合到现有的基础地图上。与使用实际的图层->不透明机制类似,添加图层->复合块将指示MapServer在临时图像缓冲区中渲染当前图层,并在最后一步将其合成回基础图像。
LAYER
COMPOSITE
COMPOP "multiply"
OPACITY 70
COMPFILTER "foo" #reserved for future use
END
END
compfilter关键字还允许在将像素合成到基础图像之前对像素应用某种过滤器(这通常用于将模糊过滤器应用到层以获得几何体周围的光环效果)。这些特性的语法和实现将在未来的版本和RFC中确定。在一个层中支持多个复合块只有在确定了这些compfilters之后才有意义。
2.1支持的合成操作¶
相当于当前层合成操作符的默认合成操作符是“SRC over”。可以使用的compop值应该是明确的,并在下面列出:
清楚的
颜色烧伤
彩色道奇
对比度*
变暗
差异
夏令时
反坦克导弹
dst-输入
dst-输出
dst-over
排除
强光
反转*
反相-rgb*
减轻
减去*
乘
覆盖
加
屏幕
柔光
src
src-atop
src-输入
src输出
src-over
异或
只有在使用agg后端时,才支持用星号(*)标记的运算符 and 如果Pixman支持未启用,则在未启用时将返回“SRC over”。
2.2向后兼容性¶
图层->不透明度将被弃用,应替换为
LAYER
COMPOSITE
OPACITY 70
END
在新 Mapfile 中。mapfile解析器和mapscript setters/getter将被更新以使用层->不透明度,但如果与复合块一起使用,将产生未指定的结果。
2.3性能影响¶
如果未显式启用,则无。根据所选的合成运算符,与使用“SRC over”时相比,性能可能略有下降。
2.4个局限性¶
合成管道仅由像素渲染器支持,因此对于PDF和SVG后端来说将不起作用。
cairo后端或启用pixman支持时不支持某些合成运算符。
三。实施细节¶
3.1建筑¶
渲染器将更新其vtable签名,以便在请求合成时包含要使用的compositerasterbuffer()函数。
将修改msdrawmap()以创建临时图像,然后在层渲染结束后调用compositerasterbuffer()。
tbd:当前的实现可以配置为使用pixman作为外部依赖项,以便在agg渲染器内使用SSE优化操作。根据成本/效益比(性能、功能、依赖性)决定是否长期保持这一点。
3.1受影响的文件¶
mapfile.c,maplexer.l:解析器,关键字。
mapagg.cpp,mapcairo.c:实际合成操作
mapcontext.c mapcopy.c,mapkml.c,maplegend.c,mapogcsld.c,maputil.c,mapscripts:内务管理和向后兼容性
mapdraw.c:调用在绘图操作中合成后端
3.2跟踪问题¶
代码:https://github.com/tbonport/mapserver/compare/compositing(将用pr_更新)
测试:TBD
第四章。投票历史¶
托马斯布、斯蒂芬、米克斯、史蒂文、丹尼尔、汤克和佩林