当Java在画布之外绘制某些东西时,它会影响性能吗?

如果我用-80和-90之类的协调绘制一些东西会影响性能,就像它实际上是在里面绘制一样?
是否值得检查最终图像是否会出现在屏幕上?
(如果不是,不绘制)
如果我用-80和-90之类的协调绘制一些东西会影响性能,就像它实际上是在里面绘制一样?

有点,但不像它在屏幕内那么多.

是否值得检查最终图像是否会出现在屏幕上? (如果不是,不绘制)

实际上,永远不值得在库中实现自己的剔除/剪切,其中绘制越界不是错误/访问冲突,因为库已经必须进行检查以避免写入内存超出界限,并且通常明智地打赌,图书馆的检查方式是聪明而快速的.

因此,如果您要在顶部添加自己的基本检查,那么现在您只是在常规的屏幕绘图中执行两项此类检查(您自己除了引擎盖下的任何内容之外),以及关闭 – 屏幕情况,你的支票可能实际上比图书馆的速度慢(或至少没有更好).

现在我必须在这里强调基本的剔除/裁剪.基本上,我的意思是检查每个形状绘制的每个形状.那里你更有可能损坏性能.

加速结构和批量裁剪/剔除

然而,在某些情况下,您可能拥有一个数据结构,可以同时有效地剔除数千个三角形,并使用单个边界框检查它是否在平截头体中,例如,在具有边界体积层次结构的3D情况下.游戏使用这些类型的数据结构,通过极少的检查大幅减少每帧所需的绘图请求量,并且您确实可以获得潜在的巨大性能优势.更基本的版本就是检查包含三角形的对象/网格是否有一个位于屏幕内的边界框,从而消除了可能通过单个边界框检查单独剔除数千个三角形.

在具有剪切的2D中,您可能能够使用诸如四叉树或固定网格之类的东西来仅选择性地绘制屏幕上的内容(并且还加速碰撞检测或点击检测,例如).如果您可以通过一次检查消除许多多余的绘图调用,那么您实际上可以获得性能提升.但同样,这是使用数据结构,通过一次检查消除了大量不必要的绘图调用.这些是空间分区结构,其唯一的目的是避免在每个形状的基础上检查事物.

对于一个更基本的2D示例,如果你说,一个2D“小部件”,为了绘制它,涉及到屏幕上绘制几十种不同的形状,如果你可以避免请求,你可能会挤压性能增益通过一次检查绘制几十个形状,以查看包含整个小部件的矩形是否在屏幕中.再次,你正在做一次检查以消除许多绘图调用.在基于每个形状进行检查的公平竞争环境中,您不会获得性能提升,但如果您可以将多个支票转换为单个支票,那么您有机会.

翻译自:https://stackoverflow.com/questions/30281472/when-java-draws-something-outside-of-canvas-will-it-affect-performance

转载注明原文:当Java在画布之外绘制某些东西时,它会影响性能吗?