move the rendered picture around on key presses
This commit is contained in:
parent
4bc8b759a6
commit
3b7237185d
1 changed files with 66 additions and 7 deletions
73
src/Main.hs
73
src/Main.hs
|
@ -114,10 +114,14 @@ main = do
|
||||||
|
|
||||||
-- -- MATRICES
|
-- -- MATRICES
|
||||||
|
|
||||||
let proj = ortho 0 800 0 600 (-1) 1 :: M44 GL.GLfloat
|
let mproj = ortho 0 800 0 600 (-1) 1 :: M44 GL.GLfloat
|
||||||
view = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 (-100) 0 0)
|
mview = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 (-100) 0 0)
|
||||||
model = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 200 200 0)
|
mmodel = mkTransformationMat (identity :: M33 GL.GLfloat) (V3 200 200 0)
|
||||||
mvp = proj !*! view !*! model
|
|
||||||
|
-- store the mtrices for later adjustments
|
||||||
|
proj <- newMVar mproj
|
||||||
|
view <- newMVar mview
|
||||||
|
model <- newMVar mmodel
|
||||||
|
|
||||||
-- -- TEXTURE
|
-- -- TEXTURE
|
||||||
|
|
||||||
|
@ -142,7 +146,7 @@ main = do
|
||||||
-- -- tell the shader where to find the texture
|
-- -- tell the shader where to find the texture
|
||||||
bind sp
|
bind sp
|
||||||
setUniform sp "u_texture" (texSlot tex)
|
setUniform sp "u_texture" (texSlot tex)
|
||||||
setUniform sp "u_mvp" mvp
|
setUniform sp "u_mvp" (mproj !*! mview !*! mmodel)
|
||||||
|
|
||||||
-- -- UNIFORMS
|
-- -- UNIFORMS
|
||||||
|
|
||||||
|
@ -188,8 +192,63 @@ main = do
|
||||||
redValue <- takeMVar red
|
redValue <- takeMVar red
|
||||||
let newRed = redValue + incrementValue
|
let newRed = redValue + incrementValue
|
||||||
|
|
||||||
-- write data to the uniform
|
-- retrieve matrices from MVars
|
||||||
-- setUniform sp "u_color" (GL.Color4 newRed 0.5 0 1 :: GL.Color4 GL.GLfloat)
|
modifyMVar_ proj (\mproj -> do
|
||||||
|
modifyMVar_ view (\mview -> do
|
||||||
|
modifyMVar_ model (\mmodel -> do
|
||||||
|
plusModel <- foldl (\acc ev -> case SDL.eventPayload ev of
|
||||||
|
(SDL.KeyboardEvent
|
||||||
|
( SDL.KeyboardEventData
|
||||||
|
_
|
||||||
|
SDL.Pressed
|
||||||
|
_
|
||||||
|
(SDL.Keysym _ code mod)
|
||||||
|
))
|
||||||
|
->
|
||||||
|
let trans =
|
||||||
|
mkTransformationMat
|
||||||
|
(identity :: M33 GL.GLfloat)
|
||||||
|
( ( if not (SDL.keyModifierLeftShift mod)
|
||||||
|
then (-1)
|
||||||
|
else 1
|
||||||
|
)
|
||||||
|
*
|
||||||
|
( case code of
|
||||||
|
SDL.KeycodeX ->
|
||||||
|
V3 1 0 0
|
||||||
|
SDL.KeycodeY ->
|
||||||
|
V3 0 1 0
|
||||||
|
_ ->
|
||||||
|
V3 0 0 0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
!-!
|
||||||
|
(identity :: M44 GL.GLfloat)
|
||||||
|
in acc !+! trans
|
||||||
|
_ -> acc !+!
|
||||||
|
(V4
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(V4
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
(V4 0 0 0 0)
|
||||||
|
)
|
||||||
|
<$> readMVar evs
|
||||||
|
let nmodel = mmodel !+! plusModel
|
||||||
|
setUniform sp "u_mvp" (mproj !*! mview !*! nmodel)
|
||||||
|
return nmodel
|
||||||
|
)
|
||||||
|
return mview
|
||||||
|
)
|
||||||
|
return mproj
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
-- the actual drawing happens here
|
-- the actual drawing happens here
|
||||||
draw vao ibo sp
|
draw vao ibo sp
|
||||||
|
|
Loading…
Reference in a new issue