Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The code matrix.scale(-1, 1); works in Chrome, but it throws an error on macOS. #3421

Closed
shingo-nakanishi opened this issue Dec 21, 2024 · 3 comments
Labels

Comments

@shingo-nakanishi
Copy link

What happened?

The code matrix.scale(-1, 1); works in Chrome, but it throws an error on macOS.

What do you expect?

No error.

How can we reproduce this?

import 'package:flame/components.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'dart:ui';

class CardFlipGame extends FlameGame {
  @override
  Future<void> onLoad() async {
    final frontSprite = await loadSprite('card_front.png');
    final backSprite = await loadSprite('card_back.png');

    add(CardPositionComponent(
      position: Vector2(size.x / 2 - 50, size.y / 2 - 75),
      size: Vector2.all(128),
      frontSprite: frontSprite,
      backSprite: backSprite,
    ));
  }
}

class CardPositionComponent extends PositionComponent with TapCallbacks {
  final Sprite frontSprite;
  final Sprite backSprite;

  CardPositionComponent({
    required super.position,
    required super.size,
    required this.frontSprite,
    required this.backSprite,
  });

  @override
  void render(Canvas canvas) {
    super.render(canvas);

    final matrix = Matrix4.identity();
    matrix.scale(-1, 1);
  }
}

What steps should take to fix this?

No response

Do have an example of where the bug occurs?

No response

Relevant log output

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following UnimplementedError was thrown during paint():
UnimplementedError

The relevant error-causing widget was:
  RenderGameWidget
  RenderGameWidget:file:///user-name/.pub-cache/hosted/pub.dev/flame-1.18.0/lib/src/game/game_widget/game_widget.dart:333:36

When the exception was thrown, this was the stack:
#0      Matrix4.scale (package:vector_math/src/vector_math_64/matrix4.dart:886:7)
#1      CardPositionComponent.render (package:flame_cookbook/card_flip_game/card_flip_game.dart:37:12)
#2      Component.renderTree (package:flame/src/components/core/component.dart:524:5)
#3      Transform2DDecorator.apply (package:flame/src/rendering/transform2d_decorator.dart:21:9)
#4      Decorator.applyChain (package:flame/src/rendering/decorator.dart:38:5)
#5      PositionComponent.renderTree (package:flame/src/components/position_component.dart:467:15)
#6      FlameGame.renderTree (package:flame/src/game/flame_game.dart:144:17)
#7      FlameGame.render (package:flame/src/game/flame_game.dart:134:7)
#8      GameRenderBox.paint (package:flame/src/game/game_render_box.dart:129:10)
#9      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#10     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:166:11)
#11     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:109:5)
#12     PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:261:7)
#13     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:242:7)
#14     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#15     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#16     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#17     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#18     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#19     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#20     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3158:15)
#21     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:633:5)
#22     RenderStack.paint (package:flutter/src/rendering/stack.dart:649:7)
#23     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#24     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#25     _RenderLayoutBuilder.paint (package:flutter/src/widgets/layout_builder.dart:356:15)
#26     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#27     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#28     _RenderColoredBox.paint (package:flutter/src/widgets/basic.dart:7826:15)
#29     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#30     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#31     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#32     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#33     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#34     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#35     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#36     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#37     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#38     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#39     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#40     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3158:15)
#41     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:633:5)
#42     RenderStack.paint (package:flutter/src/rendering/stack.dart:649:7)
#43     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#44     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#45     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3158:15)
#46     RenderFlex.paint (package:flutter/src/rendering/flex.dart:1014:7)
#47     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#48     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#49     RenderShiftedBox.paint (package:flutter/src/rendering/shifted_box.dart:74:15)
#50     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#51     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#52     RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:3158:15)
#53     RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:409:5)
#54     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#55     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#56     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#57     _RenderInkFeatures.paint (package:flutter/src/material/material.dart:662:11)
#58     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#59     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#60     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#61     RenderPhysicalModel.paint.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:2033:15)
#62     PaintingContext.pushClipRRect (package:flutter/src/rendering/object.dart:575:14)
#63     RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:2020:21)
#64     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#65     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#66     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#67     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#68     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#69     RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:130:13)
#70     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3239:7)
#71     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:166:11)
#72     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:109:5)
#73     PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1182:31)
#74     PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:1192:15)
#75     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:579:23)
#76     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1138:13)
#77     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5)
#78     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15)
#79     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1313:9)
#80     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1171:5)
#81     _invoke (dart:ui/hooks.dart:312:13)
#82     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
#83     _drawFrame (dart:ui/hooks.dart:283:31)

The following RenderObject was being processed when the exception was fired: GameRenderBox#a77b6:
  needs compositing
  creator: RenderGameWidget ← Listener ← _GestureSemantics ← RawGestureDetector ← Stack ←
    FutureBuilder<void> ← LayoutBuilder ← ColoredBox ← Directionality ← MouseRegion ← Semantics ←
    _FocusInheritedScope ← ⋯
  parentData: <none> (can use size)
  constraints: BoxConstraints(0.0<=w<=1248.0, 0.0<=h<=600.0)
  layer: OffsetLayer#018ce DETACHED
  size: Size(1248.0, 600.0)
This RenderObject has no descendants.
════════════════════════════════════════════════════════════════════════════════════════════════════

Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError
Another exception was thrown: UnimplementedError


### Execute in a terminal and put output into the code block below

Output of: flutter doctor -v

### Affected platforms

macOS

### Other information

_No response_

### Are you interested in working on a PR for this?

- [ ] I want to work on this
@shingo-nakanishi
Copy link
Author

It seems like this might be a bug in the https://github.com/google/vector_math.dart library.

@shingo-nakanishi
Copy link
Author

I was able to reproduce it without Flame, so I posted it.

google/vector_math.dart#338

@spydon
Copy link
Member

spydon commented Dec 21, 2024

I was able to reproduce it without Flame, so I posted it.

google/vector_math.dart#338

Closing this since it's an unimplemented feature on vector_math, so it can be tracked on the issue you opened there. :)

@spydon spydon closed this as completed Dec 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants