Skip to content

機能追加: cacheAsBitmap#270

Merged
ienaga merged 31 commits intomainfrom
develop
Apr 4, 2026
Merged

機能追加: cacheAsBitmap#270
ienaga merged 31 commits intomainfrom
develop

Conversation

@ienaga
Copy link
Copy Markdown
Member

@ienaga ienaga commented Apr 4, 2026

ienaga and others added 30 commits March 13, 2026 14:58
…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>
Copilot AI review requested due to automatic review settings April 4, 2026 08:31
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +755 to +763
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;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copilot uses AI. Check for mistakes.
Comment on lines +780 to +788
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;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copilot uses AI. Check for mistakes.

containerEndAtlasNode (): void
{
const node = this._pendingAtlasNodes.pop()!;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
const node = this._pendingAtlasNodes.pop()!;
const node = this._pendingAtlasNodes.pop();
if (!node) {
throw new Error(
"containerEndAtlasNode() called without a matching containerBeginAtlasNode()."
);
}

Copilot uses AI. Check for mistakes.
Comment on lines 22 to +36
$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));
};

Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
$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);

Copilot uses AI. Check for mistakes.
* TEXTURE_BINDING(0x04) | COPY_DST(0x02) = 0x06
* @type {number}
*/
const $FILL_TEXTURE_USAGE = 0x06;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
* TEXTURE_BINDING(0x04) | COPY_DST(0x02) | RENDER_ATTACHMENT(0x10) = 0x16
* @type {number}
*/
const $RENDER_TEXTURE_USAGE = 0x16;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +36 to +38
const renderMode = render_queue[index++]; // 0=vector, 1=bitmap, 2=cacheAsBitmap
const isBitmap = renderMode === 1;
const isCacheAsBitmap = renderMode === 2;
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +206 to +211
} 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];
Copy link

Copilot AI Apr 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
@ienaga ienaga merged commit d53024e into main Apr 4, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants