From a9165b852a84b236ce3afdf755ed06f37dec8008 Mon Sep 17 00:00:00 2001 From: nek0 Date: Sat, 5 Dec 2020 10:40:07 +0100 Subject: [PATCH] change byte offset to offset in number of buffer elements --- src/Classes/Graphics/Buffer.hs | 2 +- src/Types/Graphics/IndexBuffer.hs | 8 +++++--- src/Types/Graphics/VertexBuffer.hs | 7 ++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Classes/Graphics/Buffer.hs b/src/Classes/Graphics/Buffer.hs index cbbc7ab..b6c0365 100644 --- a/src/Classes/Graphics/Buffer.hs +++ b/src/Classes/Graphics/Buffer.hs @@ -37,7 +37,7 @@ class (Bindable a, Storable (StoreType a)) => write :: a -> Word - -- ^ write offset from beginning of buffer in bytes + -- ^ write offset from beginning of buffer in number of data elements -> StoreContainer a (StoreType a) -- ^ Data to write -> IO () diff --git a/src/Types/Graphics/IndexBuffer.hs b/src/Types/Graphics/IndexBuffer.hs index 1cce439..8da448d 100644 --- a/src/Types/Graphics/IndexBuffer.hs +++ b/src/Types/Graphics/IndexBuffer.hs @@ -52,7 +52,8 @@ instance Buffer IndexBuffer where write buf offset dat = do currentBufSize <- readTVarIO (iBufSize buf) whileM_ - (pure $ offset + VS.length dat * sizeOf (undefined :: StoreType IndexBuffer) + (pure $ (offset + VS.length dat) * + sizeOf (undefined :: StoreType IndexBuffer) > currentBufSize) $ do allocaArray (currentBufSize `div` sizeOf (undefined :: StoreType IndexBuffer)) @@ -77,9 +78,10 @@ instance Buffer IndexBuffer where GL.bufferSubData (target buf) GL.WriteToBuffer - (CPtrdiff $ fromIntegral offset) + (CPtrdiff $ fromIntegral offset * + sizeOf (undefined :: StoreType IndexBuffer)) (CPtrdiff $ fromIntegral $ - VS.length dat * sizeOf (undefined ::StoreType IndexBuffer)) + VS.length dat * sizeOf (undefined :: StoreType IndexBuffer)) ptr expand buf = do diff --git a/src/Types/Graphics/VertexBuffer.hs b/src/Types/Graphics/VertexBuffer.hs index 98364be..6167308 100644 --- a/src/Types/Graphics/VertexBuffer.hs +++ b/src/Types/Graphics/VertexBuffer.hs @@ -90,8 +90,8 @@ instance Buffer VertexBuffer where write buf offset dat = do currentBufSize <- readTVarIO (vBufSize buf) whileM_ - (pure $ fromIntegral offset + - VS.length dat * sizeOf (undefined :: StoreType VertexBuffer) + (pure $ (fromIntegral offset + VS.length dat) * + sizeOf (undefined :: StoreType VertexBuffer) > fromIntegral currentBufSize) $ do allocaArray (fromIntegral currentBufSize `div` @@ -119,7 +119,8 @@ instance Buffer VertexBuffer where -- target buffer type GL.WriteToBuffer -- data access direction - (CPtrdiff $ fromIntegral offset) + (CPtrdiff $ fromIntegral offset * + fromIntegral (sizeOf (undefined :: StoreType VertexBuffer))) -- offset from buffer start (CPtrdiff $ fromIntegral $ VS.length dat * sizeOf (undefined :: StoreType VertexBuffer))