Prevent drawing of shadow caps when turned off
This commit is contained in:
+31
-20
@@ -133,7 +133,7 @@ pokeRoundedFaces ::
|
||||
IO (Int, Int, Int)
|
||||
{-# INLINE pokeRoundedFaces #-}
|
||||
pokeRoundedFaces sfid col size ptr iptr ieptr (nv, nsi, nei) (tc : bc : svs) = do
|
||||
nv' <- pokeRoundedCurve col ptr tc bc svs nv
|
||||
nv' <- pokeRoundedCurve xdata col ptr tc bc svs nv
|
||||
nsi' <-
|
||||
UV.foldM'
|
||||
(pokeIndex nv iptr)
|
||||
@@ -143,6 +143,9 @@ pokeRoundedFaces sfid col size ptr iptr ieptr (nv, nsi, nei) (tc : bc : svs) = d
|
||||
else UV.foldM' (pokeIndex nv ieptr) nei $
|
||||
memoTopPrismEdgeIndices V.! (size - 3)
|
||||
return (nv', nsi', nei')
|
||||
where
|
||||
xdata | sfid = 0
|
||||
| otherwise = 1
|
||||
pokeRoundedFaces _ _ _ _ _ _ _ _ = undefined
|
||||
|
||||
pokeCylinder ::
|
||||
@@ -157,7 +160,7 @@ pokeCylinder ::
|
||||
IO (Int, Int, Int)
|
||||
{-# INLINE pokeCylinder #-}
|
||||
pokeCylinder sfid col size ptr iptr ieptr (nv, nsi, nei) (tc : bc : svs) = do
|
||||
nv' <- pokeRoundedCurve col ptr tc bc svs nv >>= pokeCylinderCaps col ptr tc bc svs
|
||||
nv' <- pokeRoundedCurve xdata col ptr tc bc svs nv >>= pokeCylinderCaps xdata col ptr tc bc svs
|
||||
nsi' <-
|
||||
UV.foldM'
|
||||
(pokeIndex nv iptr)
|
||||
@@ -168,21 +171,24 @@ pokeCylinder sfid col size ptr iptr ieptr (nv, nsi, nei) (tc : bc : svs) = do
|
||||
else UV.foldM' (pokeIndex nv ieptr) nei $
|
||||
memoTopPrismEdgeIndices V.! (size - 3)
|
||||
return (nv', nsi', nei')
|
||||
where
|
||||
xdata | sfid = 0
|
||||
| otherwise = 1
|
||||
pokeCylinder _ _ _ _ _ _ _ _ = undefined
|
||||
|
||||
pokeRoundedCurve :: Point4 -> Ptr Float -> Point3 -> Point3 -> [Point3] -> Int -> IO Int
|
||||
pokeRoundedCurve :: Float -> Point4 -> Ptr Float -> Point3 -> Point3 -> [Point3] -> Int -> IO Int
|
||||
{-# INLINE pokeRoundedCurve #-}
|
||||
pokeRoundedCurve col ptr tc bc = go True
|
||||
pokeRoundedCurve xdata col ptr tc bc = go True
|
||||
where
|
||||
go True (x : xs) n = pokeJustV tc col ptr n x >>= go False xs
|
||||
go False (x : xs) n = pokeJustV bc col ptr n x >>= go True xs
|
||||
go True (x : xs) n = pokeJustV xdata tc col ptr n x >>= go False xs
|
||||
go False (x : xs) n = pokeJustV xdata bc col ptr n x >>= go True xs
|
||||
go _ [] n = return n
|
||||
|
||||
pokeCylinderCaps :: Point4 -> Ptr Float -> Point3 -> Point3 -> [Point3] -> Int -> IO Int
|
||||
pokeCylinderCaps col ptr tc bc = go True
|
||||
pokeCylinderCaps :: Float -> Point4 -> Ptr Float -> Point3 -> Point3 -> [Point3] -> Int -> IO Int
|
||||
pokeCylinderCaps xdata col ptr tc bc = go True
|
||||
where
|
||||
go True (x : xs) n = pokeJustVInvNormal tc col ptr n x >>= go False xs
|
||||
go False (x : xs) n = pokeJustVInvNormal bc col ptr n x >>= go True xs
|
||||
go True (x : xs) n = pokeJustVInvNormal xdata tc col ptr n x >>= go False xs
|
||||
go False (x : xs) n = pokeJustVInvNormal xdata bc col ptr n x >>= go True xs
|
||||
go _ [] n = return n
|
||||
|
||||
pokeBox ::
|
||||
@@ -197,7 +203,7 @@ pokeBox ::
|
||||
IO (Int, Int, Int)
|
||||
{-# INLINE pokeBox #-}
|
||||
pokeBox sfid col size ptr iptr ieptr (nv, nsi, nei) svs = do
|
||||
nv' <- VFSM.foldM' (pokeBoxSurface col ptr svsv) nv $ VFSM.fromList $ boxSurfaces size
|
||||
nv' <- VFSM.foldM' (pokeBoxSurface xdata col ptr svsv) nv $ VFSM.fromList $ boxSurfaces size
|
||||
nsi' <-
|
||||
UV.foldM'
|
||||
(pokeIndex nv iptr)
|
||||
@@ -209,12 +215,14 @@ pokeBox sfid col size ptr iptr ieptr (nv, nsi, nei) svs = do
|
||||
return (nv', nsi', nei')
|
||||
where
|
||||
svsv = UV.fromList svs
|
||||
xdata | sfid = 0
|
||||
| otherwise = 1
|
||||
|
||||
-- should probably use a vector of Point3
|
||||
pokeBoxSurface :: Point4 -> Ptr Float -> UV.Vector Point3 -> Int -> [Int] -> IO Int
|
||||
pokeBoxSurface col ptr vs n is =
|
||||
pokeBoxSurface :: Float -> Point4 -> Ptr Float -> UV.Vector Point3 -> Int -> [Int] -> IO Int
|
||||
pokeBoxSurface xdata col ptr vs n is =
|
||||
UV.foldM'
|
||||
(pokeFlatV norm col ptr)
|
||||
(pokeFlatV xdata norm col ptr)
|
||||
n
|
||||
v
|
||||
where
|
||||
@@ -346,6 +354,7 @@ topPrismIndices n =
|
||||
-- and just doing two pokes rather than seven
|
||||
-- (especially if adding normal data)
|
||||
pokeJustV ::
|
||||
Float ->
|
||||
Point3 ->
|
||||
Point4 ->
|
||||
Ptr Float ->
|
||||
@@ -353,8 +362,8 @@ pokeJustV ::
|
||||
Point3 ->
|
||||
IO Int
|
||||
{-# INLINE pokeJustV #-}
|
||||
pokeJustV cp col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, 1, r, g, b, a, nx, ny, nz, 1]
|
||||
pokeJustV xdata cp col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, xdata, r, g, b, a, nx, ny, nz, 1]
|
||||
return (nv + 1)
|
||||
where
|
||||
f i = pokeElemOff ptr (nv * nShapeVerxComp + i)
|
||||
@@ -363,6 +372,7 @@ pokeJustV cp col ptr nv sh = do
|
||||
V3 nx ny nz = cp
|
||||
|
||||
pokeJustVInvNormal ::
|
||||
Float ->
|
||||
Point3 ->
|
||||
Point4 ->
|
||||
Ptr Float ->
|
||||
@@ -370,8 +380,8 @@ pokeJustVInvNormal ::
|
||||
Point3 ->
|
||||
IO Int
|
||||
{-# INLINE pokeJustVInvNormal #-}
|
||||
pokeJustVInvNormal cp col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, 1, r, g, b, a, nx, ny, nz, 1]
|
||||
pokeJustVInvNormal xdata cp col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, xdata, r, g, b, a, nx, ny, nz, 1]
|
||||
return (nv + 1)
|
||||
where
|
||||
f i = pokeElemOff ptr (nv * nShapeVerxComp + i)
|
||||
@@ -380,6 +390,7 @@ pokeJustVInvNormal cp col ptr nv sh = do
|
||||
V3 nx ny nz = (2 * sh) - cp
|
||||
|
||||
pokeFlatV ::
|
||||
Float ->
|
||||
Point3 ->
|
||||
Point4 ->
|
||||
Ptr Float ->
|
||||
@@ -387,8 +398,8 @@ pokeFlatV ::
|
||||
Point3 ->
|
||||
IO Int
|
||||
{-# INLINE pokeFlatV #-}
|
||||
pokeFlatV norm col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, 1, r, g, b, a, nx, ny, nz, 1]
|
||||
pokeFlatV xdata norm col ptr nv sh = do
|
||||
UV.imapM_ f $ UV.fromList [x, y, z, xdata, r, g, b, a, nx, ny, nz, 1]
|
||||
return (nv + 1)
|
||||
where
|
||||
f i = pokeElemOff ptr (nv * nShapeVerxComp + i)
|
||||
|
||||
Reference in New Issue
Block a user