From ce1937c78e5573a11327f238e44109b9b4e212da Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 11 Nov 2025 21:47:39 +0000 Subject: [PATCH] Improve normal packing and unpacking --- shader/shape/basic.vert | 4 ++-- src/Shader/Poke.hs | 10 +++++----- tags | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/shader/shape/basic.vert b/shader/shape/basic.vert index ba22315a8..bc47d171e 100644 --- a/shader/shape/basic.vert +++ b/shader/shape/basic.vert @@ -11,8 +11,8 @@ out vec4 vNorm; void main() { vPos = data[indices[gl_VertexID]].pos; vCol = unpackUnorm4x8(data[indices[gl_VertexID]].col); - vec4 n = unpackUnorm4x8(data[indices[gl_VertexID]].norm); - vNorm = n *2 - vec4(1,1,1,1); + vNorm = unpackSnorm4x8(data[indices[gl_VertexID]].norm); + //vNorm = n *2 - vec4(1,1,1,1); gl_Position = theMat * vec4(vPos.xyz,1); } //layout (location = 0) in vec4 pos; diff --git a/src/Shader/Poke.hs b/src/Shader/Poke.hs index b373faace..2c0a227e2 100644 --- a/src/Shader/Poke.hs +++ b/src/Shader/Poke.hs @@ -439,7 +439,7 @@ pokeJustV :: Float -> Point3 -> Point4 -> Ptr Float -> Int -> Point3 -> IO Int {-# INLINE pokeJustV #-} pokeJustV xdata cp col ptr nv sh = do pokeByteOff ptr (nv * shapeVerxSize) (V4 x y z xdata) - pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalToColor8 $ V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalTo8 $ V4 nx ny nz 1) pokeByteOff ptr (nv *shapeVerxSize + 5 * floatSize) (toColor8 col) return (nv + 1) where @@ -457,17 +457,17 @@ pokeFlatV :: {-# INLINE pokeFlatV #-} pokeFlatV xdata pnorm col ptr nv sh = do pokeByteOff ptr (nv * shapeVerxSize) (V4 x y z xdata) - pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalToColor8 $ V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalTo8 $ V4 nx ny nz 1) pokeByteOff ptr (nv *shapeVerxSize + 5 * floatSize) (toColor8 col) return (nv + 1) where V3 x y z = sh V3 nx ny nz = (sh - pnorm) - V3 x y z -normalToColor8 :: Point4 -> Color8 -normalToColor8 = over each f . normalize +normalTo8 :: Point4 -> V4 Int8 +normalTo8 = over each f . normalize where - f x = floor $ (x + 1) * 127.5 + f x = floor $ x * 127 pokeLayVerxs :: MV.MVector (PrimState IO) (Shader, VBO) -> diff --git a/tags b/tags index 15f2217e1..cc5a2118f 100644 --- a/tags +++ b/tags @@ -4226,7 +4226,7 @@ noclipCheck src/Dodge/WallCreatureCollisions.hs 23;" f nodeFormatting src/Dodge/Combine/Graph.hs 145;" f nodesNear src/Dodge/Path.hs 75;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 30;" f -normalToColor8 src/Shader/Poke.hs 467;" f +normalTo8 src/Shader/Poke.hs 467;" f normalizeAngle src/Geometry/Vector.hs 128;" f normalizeAnglePi src/Dodge/Base.hs 154;" f normalizeColor src/Color.hs 76;" f