Add source files, commit before reverting pictures to lists
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
{-# LANGUAGE Strict #-}
|
||||
module Picture.Render
|
||||
where
|
||||
import Control.Lens
|
||||
import Picture
|
||||
import Geometry
|
||||
|
||||
import Picture.Preload
|
||||
--import Control.Lens
|
||||
|
||||
import Foreign
|
||||
|
||||
import Codec.Picture
|
||||
|
||||
import Graphics.Rendering.OpenGL hiding (translate,scale,imageHeight,imageWidth)
|
||||
import qualified Graphics.Rendering.OpenGL as GL
|
||||
|
||||
import Data.Foldable
|
||||
import qualified Data.Vector.Storable as V
|
||||
import qualified Data.DList as DL
|
||||
|
||||
import Control.DeepSeq
|
||||
|
||||
concat34 :: (Point3,RGBA) -> [Float]
|
||||
concat34 ((x,y,z),(r,g,b,a)) = [x,y,z,r,g,b,a]
|
||||
|
||||
|
||||
toVec2 (x,y) = Vector2 x y
|
||||
toVec3 (x,y,z) = Vector3 x y z
|
||||
toVec4 (x,y,z,w) = Vector4 x y z w
|
||||
|
||||
flat2 (x,y) = DL.fromList [x,y]
|
||||
flat3 (x,y,z) = DL.fromList [x,y,z]
|
||||
flat4 (x,y,z,w) = DL.fromList [x,y,z,w]
|
||||
|
||||
mapFlat :: (NFData b) => (a -> DL.DList b) -> DL.DList a -> [b]
|
||||
mapFlat f = force . DL.toList . foldMap f
|
||||
|
||||
--marshallVs = V.unsafeWith . V.fromList
|
||||
--marshallVs = withArray
|
||||
|
||||
renderPicture' :: PreloadData -> Picture -> IO ()
|
||||
renderPicture' pdata (Scene posTri' colTri' posChar' colChar' texChar') = do
|
||||
let posTri = DL.toList posTri'
|
||||
colTri = DL.toList colTri'
|
||||
posChar = DL.toList posChar'
|
||||
colChar = DL.toList colChar'
|
||||
texChar = DL.toList texChar'
|
||||
currentProgram $= Just (_basicShader pdata)
|
||||
bindVertexArrayObject $= Just (_basicVAO pdata)
|
||||
bindBuffer ArrayBuffer $= Just (_posVBO pdata)
|
||||
let firstIndex = 0
|
||||
let vertices :: [Float]
|
||||
vertices = mapFlat flat3 posTri'
|
||||
numVertices = length vertices
|
||||
vertexSize = sizeOf (head vertices)
|
||||
pokeArray (_ptrPosVBO pdata) vertices
|
||||
bufferData ArrayBuffer $= (fromIntegral (numVertices * vertexSize), _ptrPosVBO pdata, StreamDraw)
|
||||
-- marshallVs vertices $ \ptr -> do
|
||||
-- bufferData ArrayBuffer $= (fromIntegral (numVertices * vertexSize), ptr, StreamDraw)
|
||||
bindBuffer ArrayBuffer $= Just (_colVBO pdata)
|
||||
let colVs = mapFlat flat4 colTri'
|
||||
colVsize = sizeOf $ head colVs
|
||||
pokeArray (_ptrColVBO pdata) colVs
|
||||
bufferData ArrayBuffer $= (fromIntegral (div (4 * numVertices * colVsize) 3), _ptrColVBO pdata, StreamDraw)
|
||||
-- marshallVs colVs $ \ptr -> do
|
||||
-- bufferData ArrayBuffer $= (fromIntegral (div (4 * numVertices * colVsize) 3), ptr, StreamDraw)
|
||||
drawArrays Triangles (fromIntegral firstIndex) (fromIntegral $ numVertices)
|
||||
|
||||
-- currentProgram $= Just (_textShader pdata)
|
||||
-- bindVertexArrayObject $= Just (_textVAO pdata)
|
||||
-- bindBuffer ArrayBuffer $= Just (_posVBO pdata)
|
||||
-- let vertices' = mapFlat flat3 posChar'
|
||||
-- numVertices' = length vertices'
|
||||
-- vertexSize' = sizeOf $ head vertices'
|
||||
-- withArray vertices' $ \ptr -> do
|
||||
-- bufferData ArrayBuffer $= (fromIntegral (numVertices' * vertexSize'), ptr, StreamDraw)
|
||||
-- bindBuffer ArrayBuffer $= Just (_colVBO pdata)
|
||||
-- let colVsT = mapFlat flat4 colChar'
|
||||
-- colVsTsize = sizeOf $ head colVsT
|
||||
-- withArrayLen colVsT $ \numV' ptr -> do
|
||||
-- bufferData ArrayBuffer $= (fromIntegral (numVertices' * colVsTsize), ptr, StreamDraw)
|
||||
-- bindBuffer ArrayBuffer $= Just (_texVBO pdata)
|
||||
-- let texVsT = mapFlat flat2 texChar'
|
||||
-- texVsTsize = sizeOf $ head texVsT
|
||||
-- withArrayLen texVsT $ \numV' ptr -> do
|
||||
-- bufferData ArrayBuffer $= (fromIntegral (numVertices' * texVsTsize), ptr, StreamDraw)
|
||||
-- drawArrays Triangles (fromIntegral firstIndex) (fromIntegral $ numVertices')
|
||||
|
||||
|
||||
|
||||
bufferOffset :: Integral a => a -> Ptr b
|
||||
bufferOffset = plusPtr nullPtr . fromIntegral
|
||||
|
||||
zeroZ :: Point2 -> Point3
|
||||
zeroZ (x,y) = (x,y,0)
|
||||
Reference in New Issue
Block a user