Conversation
…e in Context.ts - Add bilingual (Japanese + English) @description to all class methods - Add @param and @return tags to all methods with parameters - Add JSDoc comments to all class properties - Add English translations to module-level constant JSDoc - Convert camelCase method parameters to snake_case: - viewportWidth/viewportHeight -> viewport_width/viewport_height - vertexBuffer -> vertex_buffer, vertexCount -> vertex_count - bindGroup -> bind_group, uniformOffset -> uniform_offset - useStencilPipeline -> use_stencil_pipeline - flipY -> flip_y - Internal method body variables left unchanged per convention Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove Matrix.release(rawData) on persistent cacheAsBitmap Matrix (rawData returns internal Float32Array; releasing it corrupts the Matrix on subsequent frames, causing cache key mismatch every frame) - Signal render mode via render queue: 0=vector, 1=bitmap, 2=cacheAsBitmap - Add bitmap-like drawing path for cacheAsBitmap in Shape/TextField renderers (setTransform with matrix/cacheScale compensation for correct screen size) - Revert rotation path to original (cacheAsBitmap uses its own drawing path) - Encode cacheAsBitmap flag in TextField changed field using bit flags Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…X/scaleY Cache quality = cacheMatrix.scale × ownScale × stage.rendererScale - Matrix(1,0,0,1) at scaleX=1 → 1x quality (base) - Matrix(1,0,0,1) at scaleX=3 → 3x quality (matches own scale) - Matrix(2,0,0,2) at scaleX=1 → 2x quality (double) - Parent scale changes → cache reused (ownScale unchanged) - Hit tests, width, height remain vector-based (no change needed) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR introduces cacheAsBitmap support across rendering and hit-testing paths, along with broader refactors to consolidate utilities, simplify shader code organization, and expand automated testing (unit + E2E) around the new behavior.
Changes:
- Add
DisplayObject.cacheAsBitmap(Matrix-based) and propagate cache-aware rendering/hit-test/bounds calculations for Shape/TextField/containers. - Add WebGL container atlas-node caching flow (begin/end atlas node) to support container bitmap caching.
- Refactor shared filter utilities and documentation; remove several older shader helper modules and adjust tests accordingly.
Reviewed changes
Copilot reviewed 159 out of 294 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/webgpu/src/Filter/GlowFilterShader.ts | Removed legacy shader class source (likely moved/centralized elsewhere). |
| packages/webgpu/src/Filter/GlowFilterShader.test.ts | Removed tests for deleted Glow shader helper. |
| packages/webgpu/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.ts | Uses shared intToPremultipliedRGBA and updates parameter naming. |
| packages/webgpu/src/Filter/FilterUtil.ts | Adds shared constants + RGBA conversion helpers. |
| packages/webgpu/src/Filter/FilterGradientLUTCache.ts | Improves doc comments for cached GPUDevice reference. |
| packages/webgpu/src/Filter/DropShadowFilterShader.ts | Removed legacy shader class source (likely moved/centralized elsewhere). |
| packages/webgpu/src/Filter/DropShadowFilterShader.test.ts | Removed tests for deleted DropShadow shader helper. |
| packages/webgpu/src/Filter/DisplacementMapFilterShader.ts | Removed legacy displacement shader generator source (likely moved/centralized elsewhere). |
| packages/webgpu/src/Filter/ConvolutionFilterShader.ts | Removed legacy convolution shader generator source (likely moved/centralized elsewhere). |
| packages/webgpu/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.ts | Uses shared intToStraightRGBA and updates parameter naming + docs. |
| packages/webgpu/src/Filter/ColorMatrixFilterShader.ts | Removed legacy shader class source (likely moved/centralized elsewhere). |
| packages/webgpu/src/Filter/ColorMatrixFilterShader.test.ts | Removed tests for deleted ColorMatrix shader helper. |
| packages/webgpu/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.ts | Updates parameter naming in the apply use case. |
| packages/webgpu/src/Filter/BlurFilterUseCase.ts | Renames constants/params and clarifies docs for blur param calculation. |
| packages/webgpu/src/Filter/BlurFilterShader.ts | Removed legacy blur shader helper (likely replaced by other shader source path). |
| packages/webgpu/src/Filter/BlurFilterShader.test.ts | Removed tests for deleted blur shader helper. |
| packages/webgpu/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.ts | Removed compute-shader blur wrapper (likely replaced by other execution path). |
| packages/webgpu/src/Filter/BitmapFilterShader.test.ts | Removed tests for bitmap filter shader generator (likely moved/removed). |
| packages/webgpu/src/Filter/BevelFilterShader.ts | Removed legacy bevel shader generator (likely moved/removed). |
| packages/webgpu/src/Filter/BevelFilterShader.test.ts | Removed tests for deleted bevel shader generator. |
| packages/webgpu/src/FillTexturePool.ts | Adds doc comments; renames usage constants; keeps pooling logic. |
| packages/webgpu/src/Context/usecase/ContextGradientStrokeUseCase.ts | Adds detailed docs for cached sampler/uniforms/bind entries. |
| packages/webgpu/src/Context/usecase/ContextGradientFillUseCase.ts | Adds detailed docs for cached sampler/uniforms/stencil buffers. |
| packages/webgpu/src/Context/usecase/ContextDrawArraysInstancedUseCase.ts | Extracts pipeline-name selection into $getPipelineName helper + docs. |
| packages/webgpu/src/Context/usecase/ContextClipUseCase.ts | Adds docs for clip uniform prealloc + execute contract. |
| packages/webgpu/src/Context/usecase/ContextBitmapStrokeUseCase.ts | Adds docs for sampler cache/uniforms/bind entries. |
| packages/webgpu/src/Context/usecase/ContextBitmapFillUseCase.ts | Adds docs for sampler cache/uniforms/stencil caches. |
| packages/webgpu/src/Context/service/ContextFillWithStencilService.ts | Adds API docs for atlas-target stencil+fill two-pass. |
| packages/webgpu/src/Context/service/ContextFillWithStencilMainService.ts | Adds API docs for main-canvas stencil+fill two-pass. |
| packages/webgpu/src/Context/service/ContextFillWithStencilMainService.test.ts | Adds unit tests covering stencil+fill pass sequencing and fallbacks. |
| packages/webgpu/src/Context/service/ContextFillSimpleService.ts | Adds API docs for simple fill rendering. |
| packages/webgpu/src/Context/service/ContextComputeGradientMatrixService.ts | Renames params + adds detailed doc comment. |
| packages/webgpu/src/Context/service/ContextComputeBitmapMatrixService.ts | Adds doc comment describing inverse-matrix calculation. |
| packages/webgpu/src/Context.test.ts | Updates tests to use acquireVertexBuffer; removes clearRect no-op test. |
| packages/webgpu/src/Compute/service/ComputeExecuteBlurService.ts | Removed compute blur execution service implementation. |
| packages/webgpu/src/Compute/ComputePipelineManager.test.ts | Removed tests for compute pipeline manager (likely removed/refactored). |
| packages/webgpu/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.ts | Removed release use case (in-test helper introduced elsewhere). |
| packages/webgpu/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.ts | Adds @return docs. |
| packages/webgpu/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.test.ts | Adds unit tests for cleanup behavior. |
| packages/webgpu/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.test.ts | Replaces import with local release helper and trims redundant describe block. |
| packages/webgpu/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.ts | Adds @return docs. |
| packages/webgpu/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.test.ts | Adds unit tests verifying queue.writeBuffer payload. |
| packages/webgpu/src/BufferManager/service/BufferManagerReleaseVertexBufferService.ts | Renames bucket-size constant to $MAX_BUCKET_SIZE. |
| packages/webgpu/src/BufferManager/service/BufferManagerReleaseUniformBufferService.ts | Renames bucket-size constant to $MAX_BUCKET_SIZE. |
| packages/webgpu/src/Blend/usecase/BlendOperationUseCase.ts | Removed blend-mode switching use case implementation. |
| packages/webgpu/src/Blend/usecase/BlendOperationUseCase.test.ts | Removed tests for deleted blend operation use case. |
| packages/webgpu/src/Blend/usecase/BlendApplyComplexBlendUseCase.ts | Renames params + improves docs; adjusts error message to new name. |
| packages/webgpu/src/Blend/service/BlendSetModeService.ts | Removed blend-mode setter service. |
| packages/webgpu/src/Blend/service/BlendSetModeService.test.ts | Removed tests for deleted blend-mode setter service. |
| packages/webgpu/src/Blend/service/BlendScreenService.ts | Removed funcCode-based screen blend tweak service. |
| packages/webgpu/src/Blend/service/BlendScreenService.test.ts | Removed tests for deleted screen blend service. |
| packages/webgpu/src/Blend/service/BlendResetService.ts | Removed funcCode-based reset service. |
| packages/webgpu/src/Blend/service/BlendResetService.test.ts | Removed tests for deleted reset service. |
| packages/webgpu/src/Blend/service/BlendOneZeroService.ts | Removed funcCode-based one-zero blend service. |
| packages/webgpu/src/Blend/service/BlendOneZeroService.test.ts | Removed tests for deleted one-zero blend service. |
| packages/webgpu/src/Blend/service/BlendGetStateService.ts | Removed blend-state getter service wrapper. |
| packages/webgpu/src/Blend/service/BlendGetStateService.test.ts | Removed tests for deleted blend-state getter service. |
| packages/webgpu/src/Blend/service/BlendEraseService.ts | Removed funcCode-based erase blend service. |
| packages/webgpu/src/Blend/service/BlendEraseService.test.ts | Removed tests for deleted erase blend service. |
| packages/webgpu/src/Blend/service/BlendAlphaService.ts | Removed funcCode-based alpha blend service. |
| packages/webgpu/src/Blend/service/BlendAlphaService.test.ts | Removed tests for deleted alpha blend service. |
| packages/webgpu/src/Blend/service/BlendAddService.ts | Removed funcCode-based add blend service. |
| packages/webgpu/src/Blend/service/BlendAddService.test.ts | Removed tests for deleted add blend service. |
| packages/webgpu/src/Blend/BlendInstancedManager.ts | Renames constants/maps and improves docs. |
| packages/webgpu/src/Blend.ts | Removes funcCode mechanism; documents current blend mode and state mapping. |
| packages/webgpu/src/Blend.test.ts | Removes funcCode tests; keeps blend-mode and blend-state coverage. |
| packages/webgpu/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.ts | Renames flatnessThreshold param; removes adaptive-threshold helper. |
| packages/webgpu/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.test.ts | Removes tests tied to removed adaptive-threshold helper. |
| packages/webgpu/src/BezierConverter/BezierConverter.ts | Removes re-export of adaptive threshold; adds docs for exports. |
| packages/webgpu/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.ts | Renames params for clarity and updates docs. |
| packages/webgpu/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.ts | Renames params, improves docs, updates calls to renamed params. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.ts | Renames params and updates keying logic accordingly. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetTextureService.ts | Renames params/docs; updates create call. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.ts | Renames params/docs; updates pool iteration/splice. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.ts | Renames params/docs; updates pool iteration/splice. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.ts | Renames id counter param and uses it in returned object. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.ts | Renames id counter param and uses it in returned object. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.ts | Removed render-pass descriptor helper service (no longer exposed). |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.ts | Improves parameter docs. |
| packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.ts | Renames id counter param and uses it in returned object. |
| packages/webgpu/src/AttachmentManager.ts | Removes current-attachment tracking + render-pass descriptor helper; improves docs. |
| packages/webgpu/src/AttachmentManager.test.ts | Removes tests for removed APIs (current attachment + render pass descriptor). |
| packages/webgpu/src/AtlasManager.test.ts | Adapts tests to removed APIs and updated reset semantics. |
| packages/webgl/src/Context/usecase/ContextContainerEndAtlasNodeUseCase.ts | Adds WebGL atlas-node copy-back use case for container bitmap caching. |
| packages/webgl/src/Context/usecase/ContextContainerDrawCachedFilterUseCase.test.ts | Adds unit tests for drawing cached filters from cache store. |
| packages/webgl/src/Context/usecase/ContextContainerBeginLayerUseCase.test.ts | Adds unit tests for begin-layer behavior/stack management. |
| packages/webgl/src/Context.ts | Adds begin/end atlas-node APIs and internal pending-node stack. |
| packages/text/src/interface/IHtmlNode.ts | Adds HTML AST node interfaces (text + element) for parsing pipeline. |
| packages/text/src/TextParser/usecase/TextParserParseTagUseCase.test.ts | Switches to passing HTML string directly (removes htmlparser2 parseDocument). |
| packages/text/src/TextParser/usecase/TextParserParseHtmlTextUseCase.ts | Removes htmlparser2 usage; passes raw HTML string to parse-tag use case. |
| packages/text/package.json | Removes htmlparser2 dependency from text package. |
| packages/renderer/src/TextField/usecase/TextFieldRenderUseCase.ts | Adds bitflag parsing for text state incl. cacheAsBitmap and adjusts transform path. |
| packages/renderer/src/Shape/usecase/ShapeRenderUseCase.ts | Introduces renderMode (vector/bitmap/cacheAsBitmap) and cacheAsBitmap transform path. |
| packages/renderer/src/Shape/usecase/ShapeRenderUseCase.test.ts | Adds baseline unit tests for cached render and filter execution. |
| packages/renderer/src/Shape/usecase/ShapeClipRenderUseCase.test.ts | Adds unit tests validating clip path consumes render queue correctly. |
| packages/renderer/src/DisplayObjectContainer/usecase/DisplayObjectContainerRenderUseCase.ts | Adds cacheAsBitmap container path: atlas node caching + cache store integration. |
| packages/renderer/src/DisplayObjectContainer/usecase/DisplayObjectContainerClipRenderUseCase.test.ts | Adds unit tests for container clip render queue traversal. |
| packages/renderer/src/Command/service/CommandRemoveCacheService.test.ts | Adds unit tests for cache-entry removal and node cleanup. |
| packages/media/src/Video/usecase/VideoBuildFromCharacterUseCase.test.ts | Adds unit tests for building videos from character buffers and reuse path. |
| packages/media/src/Sound/service/SoundDecodeService.test.ts | Adds unit tests for decode behavior on empty buffer and success decode. |
| packages/display/src/TextField/usecase/TextFieldHitTestUseCase.ts | Applies cacheAsBitmap scaling into hit-test matrix computation. |
| packages/display/src/TextField/usecase/TextFieldGenerateRenderQueueUseCase.ts | Emits cacheAsBitmap flags/scales; adjusts bounds/matrix encoding for renderer. |
| packages/display/src/TextField/usecase/TextFieldCalcBoundsMatrixUseCase.ts | Applies cacheAsBitmap scaling into bounds-matrix calculation. |
| packages/display/src/Shape/usecase/ShapeHitTestUseCase.ts | Applies cacheAsBitmap scaling into hit-test matrix computation. |
| packages/display/src/Shape/usecase/ShapeGenerateRenderQueueUseCase.ts | Emits cacheAsBitmap render mode and cache-aware scaling/bounds updates. |
| packages/display/src/Shape/usecase/ShapeCalcBoundsMatrixUseCase.ts | Applies cacheAsBitmap scaling into bounds-matrix calculation. |
| packages/display/src/Loader/usecase/LoaderLoadJsonUseCase.ts | Adds unzip worker error handling via promise rejection. |
| packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerMouseHitUseCase.ts | Applies cacheAsBitmap scaling into container mouse-hit matrix multiplication. |
| packages/display/src/DisplayObjectContainer/usecase/DisplayObjectContainerCalcBoundsMatrixUseCase.ts | Applies cacheAsBitmap scaling to container bounds calculation matrix. |
| packages/display/src/DisplayObject/usecase/DisplayObjectHitTestPointUseCase.ts | Applies cacheAsBitmap scaling into bounds used for point hit testing. |
| packages/display/src/DisplayObject.ts | Adds cacheAsBitmap API + adjusts scaleX/scaleY getters + docs. |
| packages/display/src/DisplayObject.test.ts | Adds unit tests for cacheAsBitmap behavior and change propagation. |
| package.json | Bumps package version and updates devDependencies; removes dependencies section. |
| e2e/tests/textfield.spec.ts | Adds E2E coverage for htmlText rendering + cacheAsBitmap behavior. |
| e2e/tests/sprite.spec.ts | Adds E2E coverage for Sprite cacheAsBitmap incl. cache hit and Y-flip checks. |
| e2e/tests/shape.spec.ts | Adds E2E coverage for Shape cacheAsBitmap behavior. |
| e2e/pages/sprite/cache-as-bitmap.html | New E2E page demonstrating Sprite cacheAsBitmap scenarios. |
| e2e/pages/sprite/cache-as-bitmap-hit.html | New E2E page to validate Sprite cacheAsBitmap cache reuse. |
| e2e/pages/sprite/cache-as-bitmap-yflip.html | New E2E page to detect Y-axis flip regressions in caching path. |
| e2e/pages/mask/sprite-mask.html | Stabilizes video-based E2E by awaiting complete/seek and forcing redraw. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const base = this.$scaleX === null | ||
| ? displayObjectGetScaleXUseCase(this) | ||
| : this.$scaleX; | ||
|
|
||
| if (this._$cacheAsBitmap) { | ||
| const m = this._$cacheAsBitmap.rawData; | ||
| return base * Math.sqrt(m[0] * m[0] + m[1] * m[1]); | ||
| } | ||
| return base; |
There was a problem hiding this comment.
cacheAsBitmap is documented as affecting cache quality/behavior, but these changes make it affect scaleX/scaleY observables. That can break layout, bounds math, and any external code that reads scaleX/scaleY expecting only transform-derived scale. Fix by keeping scaleX/scaleY independent of cacheAsBitmap, and instead apply cache scale only in render-queue generation / renderer paths (or expose separate getters like cacheScaleX/cacheScaleY if needed).
| const base = this.$scaleY === null | ||
| ? displayObjectGetScaleYUseCase(this) | ||
| : this.$scaleY; | ||
|
|
||
| if (this._$cacheAsBitmap) { | ||
| const m = this._$cacheAsBitmap.rawData; | ||
| return base * Math.sqrt(m[2] * m[2] + m[3] * m[3]); | ||
| } | ||
| return base; |
There was a problem hiding this comment.
cacheAsBitmap is documented as affecting cache quality/behavior, but these changes make it affect scaleX/scaleY observables. That can break layout, bounds math, and any external code that reads scaleX/scaleY expecting only transform-derived scale. Fix by keeping scaleX/scaleY independent of cacheAsBitmap, and instead apply cache scale only in render-queue generation / renderer paths (or expose separate getters like cacheScaleX/cacheScaleY if needed).
|
|
||
| containerEndAtlasNode (): void | ||
| { | ||
| const node = this._pendingAtlasNodes.pop()!; |
There was a problem hiding this comment.
pop()! will throw if containerEndAtlasNode() is called without a matching containerBeginAtlasNode() (or if the stack gets out of sync due to an early return/exception). Consider guarding for an empty stack and returning early (or throwing a clearer error) to avoid hard-to-debug runtime crashes.
| const node = this._pendingAtlasNodes.pop()!; | |
| const node = this._pendingAtlasNodes.pop(); | |
| if (!node) { | |
| throw new Error( | |
| "containerEndAtlasNode() called without a matching containerBeginAtlasNode()." | |
| ); | |
| } |
| $unzipWorker.onmessage = (event: MessageEvent): void => | ||
| { | ||
| if (event.data && event.data.error) { | ||
| reject(new Error(event.data.error)); | ||
| return; | ||
| } | ||
| loaderBuildService(loader, event.data as IAnimationToolData); | ||
| resolve(); | ||
| }; | ||
|
|
||
| $unzipWorker.onerror = (event: ErrorEvent): void => | ||
| { | ||
| reject(new Error(event.message)); | ||
| }; | ||
|
|
There was a problem hiding this comment.
The worker handlers are overwritten per call but never cleared after resolve/reject. If execute() can be called multiple times, stale handlers can retain closures and make later error attribution harder. Prefer registering listeners with addEventListener + { once: true } (or explicitly nulling onmessage/onerror inside both success and error paths) so each call reliably cleans up.
| $unzipWorker.onmessage = (event: MessageEvent): void => | |
| { | |
| if (event.data && event.data.error) { | |
| reject(new Error(event.data.error)); | |
| return; | |
| } | |
| loaderBuildService(loader, event.data as IAnimationToolData); | |
| resolve(); | |
| }; | |
| $unzipWorker.onerror = (event: ErrorEvent): void => | |
| { | |
| reject(new Error(event.message)); | |
| }; | |
| const cleanup = (): void => | |
| { | |
| $unzipWorker.removeEventListener("message", handleMessage as EventListener); | |
| $unzipWorker.removeEventListener("error", handleError as EventListener); | |
| }; | |
| const handleMessage = (event: MessageEvent): void => | |
| { | |
| cleanup(); | |
| if (event.data && event.data.error) { | |
| reject(new Error(event.data.error)); | |
| return; | |
| } | |
| loaderBuildService(loader, event.data as IAnimationToolData); | |
| resolve(); | |
| }; | |
| const handleError = (event: ErrorEvent): void => | |
| { | |
| cleanup(); | |
| reject(new Error(event.message)); | |
| }; | |
| $unzipWorker.addEventListener("message", handleMessage as EventListener); | |
| $unzipWorker.addEventListener("error", handleError as EventListener); |
| * TEXTURE_BINDING(0x04) | COPY_DST(0x02) = 0x06 | ||
| * @type {number} | ||
| */ | ||
| const $FILL_TEXTURE_USAGE = 0x06; |
There was a problem hiding this comment.
These magic numbers encode GPUTextureUsage bit flags. Even with the comment, this is error-prone when usages evolve. Prefer composing them from GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST ... (or defining named constants that explicitly OR the flags) to make intent mechanically verifiable.
| * TEXTURE_BINDING(0x04) | COPY_DST(0x02) | RENDER_ATTACHMENT(0x10) = 0x16 | ||
| * @type {number} | ||
| */ | ||
| const $RENDER_TEXTURE_USAGE = 0x16; |
There was a problem hiding this comment.
These magic numbers encode GPUTextureUsage bit flags. Even with the comment, this is error-prone when usages evolve. Prefer composing them from GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST ... (or defining named constants that explicitly OR the flags) to make intent mechanically verifiable.
| const renderMode = render_queue[index++]; // 0=vector, 1=bitmap, 2=cacheAsBitmap | ||
| const isBitmap = renderMode === 1; | ||
| const isCacheAsBitmap = renderMode === 2; |
There was a problem hiding this comment.
The new renderMode === 2 (cacheAsBitmap) branch introduces distinct transform math (screenX/screenY and scale correction), but the added unit tests only exercise cache-hit and filter scenarios without explicitly covering renderMode = 2. Add a unit test that feeds renderMode=2 and asserts the expected setTransform arguments and drawDisplayObject call to prevent regressions in this critical path.
| } else if (isCacheAsBitmap) { | ||
|
|
||
| // cacheAsBitmap: Bitmapと同様の描画パスで、cacheScaleを補正 | ||
| // baseBounds原点(xMin,yMin)のスクリーン座標をtranslationに反映 | ||
| const screenX = matrix[0] * xMin + matrix[2] * yMin + matrix[4]; | ||
| const screenY = matrix[1] * xMin + matrix[3] * yMin + matrix[5]; |
There was a problem hiding this comment.
The new renderMode === 2 (cacheAsBitmap) branch introduces distinct transform math (screenX/screenY and scale correction), but the added unit tests only exercise cache-hit and filter scenarios without explicitly covering renderMode = 2. Add a unit test that feeds renderMode=2 and asserts the expected setTransform arguments and drawDisplayObject call to prevent regressions in this critical path.
#260