浏览代码

[flutter] Fix crashes & drawing.

Mario Zechner 3 年之前
父节点
当前提交
4a661aedfb
共有 3 个文件被更改,包括 14 次插入7 次删除
  1. 7 3
      spine-flutter/example/lib/main.dart
  2. 3 0
      spine-flutter/src/CMakeLists.txt
  3. 4 4
      spine-flutter/src/spine_flutter.cpp

+ 7 - 3
spine-flutter/example/lib/main.dart

@@ -39,7 +39,7 @@ class _SpineWidgetState extends State<SpineWidget> {
   @override
   Widget build(BuildContext context) {
     if (skeletonDrawable != null) {
-      print("Skeleton loaded, creating painter");
+      print("Skeleton loaded, rebuilding painter");
       return CustomPaint(
           painter: _SpinePainter(this),
           child: Container()
@@ -62,11 +62,15 @@ class _SpinePainter extends CustomPainter {
     final drawable = state.skeletonDrawable;
     if (drawable == null) return;
     final commands = drawable.render();
+    canvas.save();
     canvas.translate(size.width / 2, size.height);
     for (final cmd in commands) {
-      canvas.drawVertices(cmd.vertices, BlendMode.srcOut, Paint()..color = Colors.white); //drawable.atlas.atlasPagePaints[cmd.atlasPageIndex]);
+      canvas.drawVertices(cmd.vertices, BlendMode.srcOut, drawable.atlas.atlasPagePaints[cmd.atlasPageIndex]);
     }
-    canvas.drawLine(Offset(0, 0), Offset(size.width, size.height), Paint()..color = Colors.blue);
+    canvas.restore();
+    canvas.drawLine(Offset(0, 0), Offset(size.width, size.height), Paint()
+      ..color = Colors.blue
+      ..strokeWidth = 4);
   }
 
   @override

+ 3 - 0
spine-flutter/src/CMakeLists.txt

@@ -18,3 +18,6 @@ set_target_properties(spine_flutter PROPERTIES
 )
 target_include_directories(spine_flutter PUBLIC spine-cpp/include)
 target_compile_definitions(spine_flutter PUBLIC DART_SHARED_LIB)
+#target_compile_options(spine_flutter PUBLIC -fsanitize=address -fno-omit-frame-pointer)
+#set_target_properties(spine_flutter PROPERTIES LINK_FLAGS -fsanitize=address)
+

+ 4 - 4
spine-flutter/src/spine_flutter.cpp

@@ -97,8 +97,8 @@ FFI_PLUGIN_EXPORT void spine_skeleton_drawable_update(spine_skeleton_drawable *d
 
 spine_render_command *spine_render_command_create(int32_t numVertices, int32_t numIndices, spine_blend_mode blendMode, int pageIndex) {
     spine_render_command *cmd = SpineExtension::alloc<spine_render_command>(1, __FILE__, __LINE__);
-    cmd->positions = SpineExtension::alloc<float>(numVertices * 2, __FILE__, __LINE__);
-    cmd->uvs = SpineExtension::alloc<float>(numVertices * 2, __FILE__, __LINE__);
+    cmd->positions = SpineExtension::alloc<float>(numVertices << 1, __FILE__, __LINE__);
+    cmd->uvs = SpineExtension::alloc<float>(numVertices << 1, __FILE__, __LINE__);
     cmd->colors = SpineExtension::alloc<int32_t>(numVertices, __FILE__, __LINE__);
     cmd->numVertices = numVertices;
     cmd->indices = SpineExtension::alloc<uint16_t>(numIndices, __FILE__, __LINE__);
@@ -219,8 +219,8 @@ FFI_PLUGIN_EXPORT spine_render_command *spine_skeleton_drawable_render(spine_ske
 
         spine_render_command *cmd = spine_render_command_create(verticesCount, indicesCount, (spine_blend_mode)slot.getData().getBlendMode(), pageIndex);
 
-        memcpy(cmd->positions, vertices->buffer(), (verticesCount << 2) * sizeof(float));
-        memcpy(cmd->uvs, uvs->buffer(), (verticesCount << 2) * sizeof(float));
+        memcpy(cmd->positions, vertices->buffer(), (verticesCount << 1) * sizeof(float));
+        memcpy(cmd->uvs, uvs->buffer(), (verticesCount << 1) * sizeof(float));
         for (int ii = 0; ii < verticesCount; ii++) cmd->colors[ii] = color;
         memcpy(cmd->indices, indices->buffer(), indices->size() * sizeof(uint16_t));