packages feed

keid-resource-gltf 0.1.0.1 → 0.1.0.2

raw patch · 5 files changed

+36/−53 lines, 5 filesdep +gl-blockdep +vectordep ~geomancyPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: gl-block, vector

Dependency ranges changed: geomancy

API changes (from Hackage documentation)

- Resource.Gltf.Model: instance Geomancy.Gl.Block.Block Resource.Gltf.Model.VertexAttrs
+ Resource.Gltf.Model: instance Graphics.Gl.Block.Block Resource.Gltf.Model.VertexAttrs

Files

ChangeLog.md view
@@ -1,5 +1,11 @@ # Changelog for keid-resource-gltf +## 0.1.0.2++- Support Word8 index format.+- Fix unsafe vector zipping.+- Switch to gl-block Storable derivers.+ ## 0.1.0.1  - Switch to block-derived Storable instance.
README.md view
@@ -1,1 +1,5 @@ # Keid Engine - glTF resource++Keid-specific utilities over [gltf-codec] to load and manipulate glTF scenes with Keid specifics.++[gltf-codec]: https://hackage.haskell.org/package/gltf-codec
keid-resource-gltf.cabal view
@@ -1,16 +1,16 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.35.1.+-- This file has been generated from package.yaml by hpack version 0.35.2. -- -- see: https://github.com/sol/hpack  name:           keid-resource-gltf-version:        0.1.0.1+version:        0.1.0.2 synopsis:       GLTF loader for Keid engine. category:       Game Engine author:         IC Rainbow maintainer:     keid@aenor.ru-copyright:      2021 IC Rainbow+copyright:      2023 IC Rainbow license:        BSD3 license-file:   LICENSE build-type:     Simple@@ -34,67 +34,38 @@   default-extensions:       NoImplicitPrelude       ApplicativeDo-      BangPatterns       BinaryLiterals       BlockArguments-      ConstrainedClassMethods-      ConstraintKinds       DataKinds       DefaultSignatures-      DeriveDataTypeable-      DeriveFunctor-      DeriveGeneric-      DeriveLift-      DeriveTraversable       DerivingStrategies       DerivingVia       DuplicateRecordFields-      EmptyCase-      EmptyDataDeriving-      ExistentialQuantification-      ExplicitForAll-      FlexibleContexts-      FlexibleInstances       FunctionalDependencies-      GADTs-      GeneralizedNewtypeDeriving       HexFloatLiterals       ImportQualifiedPost-      InstanceSigs-      KindSignatures       LambdaCase-      LiberalTypeSynonyms-      MultiParamTypeClasses       NamedFieldPuns-      NamedWildCards       NumDecimals-      NumericUnderscores+      OverloadedRecordDot       OverloadedStrings       PatternSynonyms-      PostfixOperators-      QuantifiedConstraints       QuasiQuotes-      RankNTypes       RecordWildCards-      ScopedTypeVariables-      StandaloneDeriving-      StandaloneKindSignatures       StrictData       TemplateHaskell-      TupleSections-      TypeApplications       TypeFamilies       TypeOperators-      TypeSynonymInstances-      UnicodeSyntax       ViewPatterns   ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints   build-depends:       base >=4.7 && <5     , bytestring     , containers-    , geomancy >=0.2.5.0+    , geomancy >=0.2.6.0+    , gl-block     , gltf-codec     , keid-core     , rio >=0.1.12.0-  default-language: Haskell2010+    , vector+  default-language: GHC2021
src/Resource/Gltf/Load.hs view
@@ -21,6 +21,7 @@ import Codec.GlTF.Root qualified as Root import Codec.GlTF.URI qualified as URI import Data.ByteString.Unsafe qualified as ByteString+import Data.Vector qualified as Vector import Foreign qualified import Geomancy (Vec2, Vec4, vec3, withVec4) import Geomancy.Vec3 qualified as Vec3@@ -28,7 +29,6 @@ import RIO.FilePath (takeDirectory, takeExtensions, (</>)) import RIO.HashMap qualified as HashMap import RIO.List qualified as List-import RIO.Vector qualified as Vector  import Resource.Compressed.Zstd qualified as Zstd import Resource.Gltf.Model (MeshPrimitive, Stuff(..), VertexAttrs(..))@@ -150,8 +150,9 @@     Nothing ->       throwString $ "No meshes in " <> fp     Just meshes ->-      for (Vector.zip (Vector.fromList [0 :: Int ..]) meshes) \(_meshIx, mesh) -> do-        for (Vector.zip (Vector.fromList [0 :: Int ..]) (Mesh.primitives mesh)) \(_primIx, prim) -> do+      -- XXX: the indices are provided to assist with debugging+      Vector.iforM meshes \_meshIx mesh -> do+        Vector.iforM (Mesh.primitives mesh) \_primIx prim -> do           -- traceShowM           --   ( "mesh"           --   , _meshIx, Mesh.name mesh@@ -168,17 +169,18 @@             Nothing ->               throwString "No indices for mesh primitive"             Just aix -> do-              -- accessBuffer @Word16 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_SHORT aix-              indices <- catch-                (fmap Right $ accessBuffer @Word32 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_INT aix)-                (\UnexpectedComponentType{} ->-                    fmap Left $ accessBuffer @Word16 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_SHORT aix-                )-              case indices of-                Right word32s ->-                  pure word32s-                Left word16s ->-                  pure $ fmap fromIntegral word16s+              Accessor.Accessor{componentType} <- getAccessor aix+              case componentType of+                Accessor.UNSIGNED_INT ->+                  accessBuffer @Word32 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_INT aix+                Accessor.UNSIGNED_SHORT ->+                  fmap (fmap fromIntegral) $+                    accessBuffer @Word16 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_SHORT aix+                Accessor.UNSIGNED_BYTE ->+                  fmap (fmap fromIntegral) $+                    accessBuffer @Word8 getAccessor getBufferView getBuffer Accessor.SCALAR Accessor.UNSIGNED_BYTE aix+                huh ->+                  throwM $ UnexpectedComponentType aix Accessor.UNSIGNED_INT huh            (material, indices) <- case Mesh.material prim of             Nothing ->
src/Resource/Gltf/Model.hs view
@@ -19,9 +19,9 @@ import Codec.GlTF.Material qualified as GlTF (Material) import Data.Semigroup (Semigroup(..)) import Geomancy (Vec2)-import Geomancy.Gl.Block (Block)-import Geomancy.Gl.Block qualified as Block import Geomancy.Vec3 qualified as Vec3+import Graphics.Gl.Block (Block)+import Graphics.Gl.Block qualified as Block import RIO.List qualified as List import RIO.Vector qualified as Vector