From 4a499165c44163f60056f5b85af6e2f8cc2c447d Mon Sep 17 00:00:00 2001 From: nek0 Date: Fri, 22 May 2020 02:29:16 +0200 Subject: [PATCH] get initial renderer to run --- renderer-tutorial.cabal | 1 + src/IndexBuffer.hs | 2 +- src/Main.hs | 14 ++++++++------ src/Renderer.hs | 21 +++++++++++++++++++++ 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/Renderer.hs diff --git a/renderer-tutorial.cabal b/renderer-tutorial.cabal index 4dddfba..f12d5ca 100644 --- a/renderer-tutorial.cabal +++ b/renderer-tutorial.cabal @@ -32,5 +32,6 @@ executable renderer-tutorial , VertexArray , IndexBuffer , Shader + , Renderer hs-source-dirs: src default-language: Haskell2010 diff --git a/src/IndexBuffer.hs b/src/IndexBuffer.hs index 8d1d7ce..d129f11 100644 --- a/src/IndexBuffer.hs +++ b/src/IndexBuffer.hs @@ -17,7 +17,7 @@ data IndexBuffer a = IndexBuffer { iBufId :: GL.BufferObject -- buffer id , iBufSize :: GL.GLsizeiptr -- size of data , iBufData :: Ptr a -- pointer to data - , iBufCount :: GL.GLuint -- number of data elements + , iBufCount :: GL.GLint -- number of data elements } -- instanciate typeclass from BufferClass and fill in missing implementations diff --git a/src/Main.hs b/src/Main.hs index 61e22e1..744fd22 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -37,6 +37,7 @@ import VertexArray import VertexBuffer import IndexBuffer import Shader +import Renderer main :: IO () main = do @@ -169,11 +170,11 @@ main = do -- clear buffers before drawing GL.clear [GL.ColorBuffer] - -- rebind everything neccessary for draw call - bind vao - -- (note the missing bindings to the vertex buffer and the attrib pointer) - bind ibo - bind sp + -- -- rebind everything neccessary for draw call + -- bind vao + -- -- (note the missing bindings to the vertex buffer and the attrib pointer) + -- bind ibo + -- bind sp -- throw away previous errors -- void $ get GL.errors @@ -186,7 +187,8 @@ main = do setUniform sp "u_color" (GL.Color4 newRed 0.5 0 1 :: GL.Color4 GL.GLfloat) -- the actual drawing happens here - GL.drawElements GL.Triangles 6 GL.UnsignedInt nullPtr + draw vao ibo sp + -- GL.drawElements GL.Triangles 6 GL.UnsignedInt nullPtr err <- get GL.errors when (not $ null err) (print $ "loop errors: " <> show err) diff --git a/src/Renderer.hs b/src/Renderer.hs new file mode 100644 index 0000000..c39c829 --- /dev/null +++ b/src/Renderer.hs @@ -0,0 +1,21 @@ +module Renderer where + +import SDL (($=), get) + +import qualified Graphics.Rendering.OpenGL as GL + +import Foreign.Ptr + +-- internal imports + +import BindableClass +import VertexArray +import IndexBuffer +import Shader + +draw :: VertexArray -> (IndexBuffer a) -> Shader -> IO () +draw va ib sp = do + bind sp + bind va + bind ib + GL.drawElements GL.Triangles (iBufCount ib) GL.UnsignedInt nullPtr