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 +6/−0
- README.md +4/−0
- keid-resource-gltf.cabal +8/−37
- src/Resource/Gltf/Load.hs +16/−14
- src/Resource/Gltf/Model.hs +2/−2
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