访问 HTML5 Canvas 的 DrawingContext2D Save/Restore 堆栈?
Accessing the HTML5 Canvas's DrawingContext2D Save/Restore Stack?
有没有办法访问 HTML Canvas
元素的 DrawingContext2D
save
和 restore
堆栈?
目的是save
一个基本状态,clip
它的一个区域关闭,允许进行一些可能适用的操作clip
,save
, restore
具有不确定的顺序(即某些东西可能 save
2-3 个状态到堆栈并且永远不会恢复它们或者它可能 restore
多次并失去之前的原始 save
状态返回到父函数,然后父函数将尝试 restore
堆栈中不再存在的状态。)
我更愿意在 DrawingContext2D
周围没有包装器 class 的情况下执行此操作,因为 JavaScript 每次函数调用都会变慢一点,并且渲染往往对时间敏感。
能够限制被调用函数中可能的 restore
调用次数而不依赖被调用函数来维持该限制也很棒。
Is there a way to access the HTML Canvas element's DrawingContext2D save and restore stack under the hood?
状态堆栈是内部的,不会以任何方式暴露。您可以通过在上下文 prototype 上将您自己的调用提升为包装器来利用 save/restore 调用本身(例如,参见 this answer 显示了一种方法)并从那里保持计数跟踪 - 这不会影响上下文的其余部分 performance-wise。当然,您仍然无法访问内部结构。但是会有一些注意事项,例如您如何区分呼叫源以及您如何知道何时应该允许或不允许呼叫(顺便说一句,呼叫 restore()
多于 save()
是安全的)。
但是,如果可能的话,我会完全避免使用 save/restore。大多数状态都可以通过仅跟踪或设置您实际需要的状态(包括转换)来跟踪 "manually"(setTransform()
在这里非常方便)。
主要障碍是使用裁剪。目前没有使用 save/restore(或设置上下文大小)的方法来重置裁剪 - standard includes it 但目前似乎没有任何供应商支持它。但是,在许多情况下,您可以使用合成代替裁剪,有时与 off-screen 画布结合使用。
有没有办法访问 HTML Canvas
元素的 DrawingContext2D
save
和 restore
堆栈?
目的是save
一个基本状态,clip
它的一个区域关闭,允许进行一些可能适用的操作clip
,save
, restore
具有不确定的顺序(即某些东西可能 save
2-3 个状态到堆栈并且永远不会恢复它们或者它可能 restore
多次并失去之前的原始 save
状态返回到父函数,然后父函数将尝试 restore
堆栈中不再存在的状态。)
我更愿意在 DrawingContext2D
周围没有包装器 class 的情况下执行此操作,因为 JavaScript 每次函数调用都会变慢一点,并且渲染往往对时间敏感。
能够限制被调用函数中可能的 restore
调用次数而不依赖被调用函数来维持该限制也很棒。
Is there a way to access the HTML Canvas element's DrawingContext2D save and restore stack under the hood?
状态堆栈是内部的,不会以任何方式暴露。您可以通过在上下文 prototype 上将您自己的调用提升为包装器来利用 save/restore 调用本身(例如,参见 this answer 显示了一种方法)并从那里保持计数跟踪 - 这不会影响上下文的其余部分 performance-wise。当然,您仍然无法访问内部结构。但是会有一些注意事项,例如您如何区分呼叫源以及您如何知道何时应该允许或不允许呼叫(顺便说一句,呼叫 restore()
多于 save()
是安全的)。
但是,如果可能的话,我会完全避免使用 save/restore。大多数状态都可以通过仅跟踪或设置您实际需要的状态(包括转换)来跟踪 "manually"(setTransform()
在这里非常方便)。
主要障碍是使用裁剪。目前没有使用 save/restore(或设置上下文大小)的方法来重置裁剪 - standard includes it 但目前似乎没有任何供应商支持它。但是,在许多情况下,您可以使用合成代替裁剪,有时与 off-screen 画布结合使用。