From 3308aaddb09e009bd376efb939089edbc9013fe2 Mon Sep 17 00:00:00 2001 From: jvenin Date: Tue, 23 Apr 2024 10:17:37 +0200 Subject: [PATCH] feat: fixed textures + improved loadings --- .../gsf/header2/material_attribute.dart | 16 +++++------ lib/classes/model.dart | 27 ++++++++++++------- pubspec.lock | 4 +-- pubspec.yaml | 2 +- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/lib/classes/gsf/header2/material_attribute.dart b/lib/classes/gsf/header2/material_attribute.dart index 0642356..2ea836b 100644 --- a/lib/classes/gsf/header2/material_attribute.dart +++ b/lib/classes/gsf/header2/material_attribute.dart @@ -36,10 +36,10 @@ class MaterialAttribute { if (other is MaterialAttribute) { return useHardAlpha == other.useHardAlpha && useSoftAlpha == other.useSoftAlpha && - useNm == other.useNm && - useShininessShader == other.useShininessShader && - usePlayerColor == other.usePlayerColor && - useWaterShader == other.useWaterShader; + //useNm == other.useNm && + //useShininessShader == other.useShininessShader && + usePlayerColor == other.usePlayerColor; + //useWaterShader == other.useWaterShader; } return false; } @@ -48,9 +48,9 @@ class MaterialAttribute { int get hashCode { return useHardAlpha.hashCode ^ useSoftAlpha.hashCode ^ - useNm.hashCode ^ - useShininessShader.hashCode ^ - usePlayerColor.hashCode ^ - useWaterShader.hashCode; + //useNm.hashCode ^ + //useShininessShader.hashCode ^ + usePlayerColor.hashCode; + //useWaterShader.hashCode; } } diff --git a/lib/classes/model.dart b/lib/classes/model.dart index 45da711..9f36d1a 100644 --- a/lib/classes/model.dart +++ b/lib/classes/model.dart @@ -1,3 +1,4 @@ +import 'dart:isolate'; import 'dart:typed_data'; import 'dart:ui' as ui; @@ -79,19 +80,25 @@ class Model { numChannels: 4, ); - for (final p in fullTexture) { - for (var data in _texturesOffsets.entries) { - final textureImage = data.key.imageData; - final textureOffset = data.value.$1; - if (textureImage!.height > p.y && - (p.x - textureOffset) > 0 && - textureImage.width > (p.x - textureOffset)) { - final pixel = textureImage.getPixel(p.x - textureOffset, p.y); - p.setRgba(pixel.r, pixel.g, pixel.b, pixel.a); + img.Image createFullTexture( + img.Image image, Map offsets) { + for (final p in image) { + for (var data in offsets.entries) { + final textureImage = data.key.imageData; + final textureOffset = data.value.$1; + if (textureImage!.height > p.y && + (p.x - textureOffset) > 0 && + textureImage.width > (p.x - textureOffset)) { + final pixel = textureImage.getPixel(p.x - textureOffset, p.y); + p.setRgba(pixel.r, pixel.g, pixel.b, pixel.a); + } } } + return image; } - + // to avoid blocking UI this is executed in separate isolate + fullTexture = await Isolate.run( + () => createFullTexture(fullTexture, _texturesOffsets)); _composedModelImage = await (ModelTexture(attribute: MaterialAttribute.zero(), path: "") ..imageData = fullTexture) diff --git a/pubspec.lock b/pubspec.lock index cc5461a..f026a33 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -348,8 +348,8 @@ packages: dependency: "direct main" description: path: "." - ref: "9fb1ca17" - resolved-ref: "9fb1ca1757d98acc125d1809a2787b19f2a617a5" + ref: efef5ae3 + resolved-ref: efef5ae3357a9d851f33282ff4a63dae6b096534 url: "http://github.com/arceusVen1/image-with-dds" source: git version: "4.1.8" diff --git a/pubspec.yaml b/pubspec.yaml index b73fbf1..d8b5816 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,7 +45,7 @@ dependencies: image: git: url: http://github.com/arceusVen1/image-with-dds - ref: 9fb1ca17 + ref: efef5ae3 dev_dependencies: flutter_test: sdk: flutter