summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2016-12-25 14:12:15 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2016-12-25 14:12:15 +0100
commit34d9d28e477c36bff04fbe72e4625f84d3f35f8b (patch)
tree4658da7655cfc597ce934b86d43410e8aaba5a95
parent9a6e7b2b83f582157a7c004451a20d8280829499 (diff)
count render calls
-rw-r--r--src/LambdaCube/GL/Backend.hs15
-rw-r--r--src/LambdaCube/GL/Type.hs1
2 files changed, 11 insertions, 5 deletions
diff --git a/src/LambdaCube/GL/Backend.hs b/src/LambdaCube/GL/Backend.hs
index 619ea76..84e5b04 100644
--- a/src/LambdaCube/GL/Backend.hs
+++ b/src/LambdaCube/GL/Backend.hs
@@ -506,6 +506,7 @@ allocRenderer p = do
506 forceSetup <- newIORef True 506 forceSetup <- newIORef True
507 vertexBufferRef <- newIORef 0 507 vertexBufferRef <- newIORef 0
508 indexBufferRef <- newIORef 0 508 indexBufferRef <- newIORef 0
509 drawCallCounterRef <- newIORef 0
509 return $ GLRenderer 510 return $ GLRenderer
510 { glPrograms = prgs 511 { glPrograms = prgs
511 , glTextures = texs 512 , glTextures = texs
@@ -522,6 +523,7 @@ allocRenderer p = do
522 , glForceSetup = forceSetup 523 , glForceSetup = forceSetup
523 , glVertexBufferRef = vertexBufferRef 524 , glVertexBufferRef = vertexBufferRef
524 , glIndexBufferRef = indexBufferRef 525 , glIndexBufferRef = indexBufferRef
526 , glDrawCallCounterRef = drawCallCounterRef
525 } 527 }
526 528
527disposeRenderer :: GLRenderer -> IO () 529disposeRenderer :: GLRenderer -> IO ()
@@ -692,8 +694,8 @@ setStorage' p@GLRenderer{..} input' = do
692 buffer binding on various targets: GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER 694 buffer binding on various targets: GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER
693 glEnable/DisableVertexAttribArray 695 glEnable/DisableVertexAttribArray
694-} 696-}
695renderSlot :: IORef GLuint -> IORef GLuint -> [GLObjectCommand] -> IO () 697renderSlot :: IORef Int -> IORef GLuint -> IORef GLuint -> [GLObjectCommand] -> IO ()
696renderSlot glVertexBufferRef glIndexBufferRef cmds = forM_ cmds $ \cmd -> do 698renderSlot glDrawCallCounterRef glVertexBufferRef glIndexBufferRef cmds = forM_ cmds $ \cmd -> do
697 let setup ref v m = do 699 let setup ref v m = do
698 old <- readIORef ref 700 old <- readIORef ref
699 unless (old == v) $ do 701 unless (old == v) $ do
@@ -709,10 +711,11 @@ renderSlot glVertexBufferRef glIndexBufferRef cmds = forM_ cmds $ \cmd -> do
709 setup glVertexBufferRef buf $ glBindBuffer GL_ARRAY_BUFFER buf 711 setup glVertexBufferRef buf $ glBindBuffer GL_ARRAY_BUFFER buf
710 glEnableVertexAttribArray idx 712 glEnableVertexAttribArray idx
711 glVertexAttribIPointer idx size typ 0 ptr 713 glVertexAttribIPointer idx size typ 0 ptr
712 GLDrawArrays mode first count -> glDrawArrays mode first count 714 GLDrawArrays mode first count -> glDrawArrays mode first count >> modifyIORef glDrawCallCounterRef succ
713 GLDrawElements mode count typ buf indicesPtr -> do 715 GLDrawElements mode count typ buf indicesPtr -> do
714 setup glIndexBufferRef buf $ glBindBuffer GL_ELEMENT_ARRAY_BUFFER buf 716 setup glIndexBufferRef buf $ glBindBuffer GL_ELEMENT_ARRAY_BUFFER buf
715 glDrawElements mode count typ indicesPtr 717 glDrawElements mode count typ indicesPtr
718 modifyIORef glDrawCallCounterRef succ
716 GLSetUniform idx (GLUniform ty ref) -> setUniform idx ty ref 719 GLSetUniform idx (GLUniform ty ref) -> setUniform idx ty ref
717 GLBindTexture txTarget tuRef (GLUniform _ ref) -> do 720 GLBindTexture txTarget tuRef (GLUniform _ ref) -> do
718 txObjVal <- readIORef ref 721 txObjVal <- readIORef ref
@@ -781,6 +784,7 @@ renderFrame GLRenderer{..} = do
781 writeIORef glForceSetup True 784 writeIORef glForceSetup True
782 writeIORef glVertexBufferRef 0 785 writeIORef glVertexBufferRef 0
783 writeIORef glIndexBufferRef 0 786 writeIORef glIndexBufferRef 0
787 writeIORef glDrawCallCounterRef 0
784 glBindVertexArray glVAO 788 glBindVertexArray glVAO
785 forM_ glCommands $ \cmd -> do 789 forM_ glCommands $ \cmd -> do
786 case cmd of 790 case cmd of
@@ -792,7 +796,7 @@ renderFrame GLRenderer{..} = do
792 GLRenderStream ctx streamIdx progIdx -> do 796 GLRenderStream ctx streamIdx progIdx -> do
793 setupDrawContext glForceSetup glDrawContextRef glInput ctx 797 setupDrawContext glForceSetup glDrawContextRef glInput ctx
794 drawcmd <- readIORef (glStreamCommands $ glStreams ! streamIdx) 798 drawcmd <- readIORef (glStreamCommands $ glStreams ! streamIdx)
795 renderSlot glVertexBufferRef glIndexBufferRef drawcmd 799 renderSlot glDrawCallCounterRef glVertexBufferRef glIndexBufferRef drawcmd
796 800
797 GLRenderSlot ctx slotIdx progIdx -> do 801 GLRenderSlot ctx slotIdx progIdx -> do
798 input <- readIORef glInput 802 input <- readIORef glInput
@@ -805,7 +809,7 @@ renderFrame GLRenderer{..} = do
805 unless setupDone $ setupDrawContext glForceSetup glDrawContextRef glInput ctx 809 unless setupDone $ setupDrawContext glForceSetup glDrawContextRef glInput ctx
806 drawcmd <- readIORef $ objCommands obj 810 drawcmd <- readIORef $ objCommands obj
807 --putStrLn "Render object" 811 --putStrLn "Render object"
808 renderSlot glVertexBufferRef glIndexBufferRef ((drawcmd ! icId ic) ! progIdx) 812 renderSlot glDrawCallCounterRef glVertexBufferRef glIndexBufferRef ((drawcmd ! icId ic) ! progIdx)
809 return True 813 return True
810 --putStrLn $ "Rendering " ++ show (V.length objs) ++ " objects" 814 --putStrLn $ "Rendering " ++ show (V.length objs) ++ " objects"
811 readIORef (slotVector (icInput ic) ! (icSlotMapPipelineToInput ic ! slotIdx)) >>= \case 815 readIORef (slotVector (icInput ic) ! (icSlotMapPipelineToInput ic ! slotIdx)) >>= \case
@@ -814,6 +818,7 @@ renderFrame GLRenderer{..} = do
814 818
815 --isOk <- checkGL 819 --isOk <- checkGL
816 --putStrLn $ isOk ++ " - " ++ show cmd 820 --putStrLn $ isOk ++ " - " ++ show cmd
821 --readIORef glDrawCallCounterRef >>= \n -> putStrLn (show n ++ " draw calls")
817 822
818data CGState 823data CGState
819 = CGState 824 = CGState
diff --git a/src/LambdaCube/GL/Type.hs b/src/LambdaCube/GL/Type.hs
index 9769603..b406fa6 100644
--- a/src/LambdaCube/GL/Type.hs
+++ b/src/LambdaCube/GL/Type.hs
@@ -163,6 +163,7 @@ data GLRenderer
163 , glForceSetup :: IORef Bool 163 , glForceSetup :: IORef Bool
164 , glVertexBufferRef :: IORef GLuint 164 , glVertexBufferRef :: IORef GLuint
165 , glIndexBufferRef :: IORef GLuint 165 , glIndexBufferRef :: IORef GLuint
166 , glDrawCallCounterRef :: IORef Int
166 } 167 }
167 168
168data GLSampler 169data GLSampler