moved generation of GLMapState
GLMapState now get generated inside the renderer and takes the map-data as argument GLMapState got extended by (up to now) uninitialized and unused textures.
This commit is contained in:
parent
ca831692d2
commit
f76da4b5f6
23
src/Main.hs
23
src/Main.hs
@ -82,9 +82,7 @@ main =
|
|||||||
(Size fbWidth fbHeight) <- glGetDrawableSize window'
|
(Size fbWidth fbHeight) <- glGetDrawableSize window'
|
||||||
initRendering
|
initRendering
|
||||||
--generate map vertices
|
--generate map vertices
|
||||||
(mapBuffer, vert) <- getMapBufferObject
|
glMap' <- initMapShader 4 =<< getMapBufferObject
|
||||||
(mapprog, ci, ni, vi, pri, vii, mi, nmi, tli, tlo, mapTex) <- initMapShader
|
|
||||||
overTex <- GL.genObjectName
|
|
||||||
print window'
|
print window'
|
||||||
eventQueue <- newTQueueIO :: IO (TQueue Event)
|
eventQueue <- newTQueueIO :: IO (TQueue Event)
|
||||||
putStrLn "foo"
|
putStrLn "foo"
|
||||||
@ -109,23 +107,6 @@ main =
|
|||||||
, _left = False
|
, _left = False
|
||||||
, _right = False
|
, _right = False
|
||||||
}
|
}
|
||||||
glMap' = GLMapState
|
|
||||||
{ _shdrVertexIndex = vi
|
|
||||||
, _shdrNormalIndex = ni
|
|
||||||
, _shdrColorIndex = ci
|
|
||||||
, _shdrProjMatIndex = pri
|
|
||||||
, _shdrViewMatIndex = vii
|
|
||||||
, _shdrModelMatIndex = mi
|
|
||||||
, _shdrNormalMatIndex = nmi
|
|
||||||
, _shdrTessInnerIndex = tli
|
|
||||||
, _shdrTessOuterIndex = tlo
|
|
||||||
, _stateTessellationFactor = 4
|
|
||||||
, _stateMap = mapBuffer
|
|
||||||
, _mapVert = vert
|
|
||||||
, _mapProgram = mapprog
|
|
||||||
, _mapTexture = mapTex
|
|
||||||
, _overviewTexture = overTex
|
|
||||||
}
|
|
||||||
env = Env
|
env = Env
|
||||||
{ _eventsChan = eventQueue
|
{ _eventsChan = eventQueue
|
||||||
, _windowObject = window'
|
, _windowObject = window'
|
||||||
@ -302,7 +283,7 @@ adjustWindow = do
|
|||||||
|
|
||||||
|
|
||||||
let hudtexid = state ^. gl.glHud.hudTexture
|
let hudtexid = state ^. gl.glHud.hudTexture
|
||||||
maptexid = state ^. gl.glMap.mapTexture
|
maptexid = state ^. gl.glMap.renderedMapTexture
|
||||||
allocaBytes (fbWidth*fbHeight*4) $ \ptr -> do
|
allocaBytes (fbWidth*fbHeight*4) $ \ptr -> do
|
||||||
--default to ugly pink to see if
|
--default to ugly pink to see if
|
||||||
--somethings go wrong.
|
--somethings go wrong.
|
||||||
|
@ -50,22 +50,11 @@ initBuffer varray =
|
|||||||
checkError "initBuffer"
|
checkError "initBuffer"
|
||||||
return bufferObject
|
return bufferObject
|
||||||
|
|
||||||
initMapShader :: IO (
|
initMapShader ::
|
||||||
Program -- the GLSL-Program
|
Int -- ^ initial Tessallation-Factor
|
||||||
, AttribLocation -- color
|
-> (BufferObject,NumArrayIndices) -- ^ Buffer with Data and DataDescriptor
|
||||||
, AttribLocation -- normal
|
-> IO GLMapState
|
||||||
, AttribLocation -- vertex
|
initMapShader tessFac (buf, vertDes) = do
|
||||||
, UniformLocation -- ProjectionMat
|
|
||||||
, UniformLocation -- ViewMat
|
|
||||||
, UniformLocation -- ModelMat
|
|
||||||
, UniformLocation -- NormalMat
|
|
||||||
, UniformLocation -- TessLevelInner
|
|
||||||
, UniformLocation -- TessLevelOuter
|
|
||||||
, TextureObject -- Texture where to draw into
|
|
||||||
) -- ^ (the GLSL-Program, color, normal, vertex, ProjectionMat, ViewMat,
|
|
||||||
-- ModelMat, NormalMat, TessLevelInner, TessLevelOuter,
|
|
||||||
-- Texture where to draw into)
|
|
||||||
initMapShader = do
|
|
||||||
! vertexSource <- B.readFile mapVertexShaderFile
|
! vertexSource <- B.readFile mapVertexShaderFile
|
||||||
! tessControlSource <- B.readFile mapTessControlShaderFile
|
! tessControlSource <- B.readFile mapTessControlShaderFile
|
||||||
! tessEvalSource <- B.readFile mapTessEvalShaderFile
|
! tessEvalSource <- B.readFile mapTessEvalShaderFile
|
||||||
@ -120,9 +109,30 @@ initMapShader = do
|
|||||||
putStrLn $ unlines $ ["Indices: ", show (colorIndex, normalIndex, vertexIndex)]
|
putStrLn $ unlines $ ["Indices: ", show (colorIndex, normalIndex, vertexIndex)]
|
||||||
|
|
||||||
tex <- genObjectName
|
tex <- genObjectName
|
||||||
|
overTex <- genObjectName
|
||||||
|
|
||||||
|
texts <- genObjectNames 6
|
||||||
|
|
||||||
|
|
||||||
checkError "initShader"
|
checkError "initShader"
|
||||||
return (program, colorIndex, normalIndex, vertexIndex, projectionMatrixIndex, viewMatrixIndex, modelMatrixIndex, normalMatrixIndex, tessLevelInner, tessLevelOuter, tex)
|
return GLMapState
|
||||||
|
{ _mapProgram = program
|
||||||
|
, _shdrColorIndex = colorIndex
|
||||||
|
, _shdrNormalIndex = normalIndex
|
||||||
|
, _shdrVertexIndex = vertexIndex
|
||||||
|
, _shdrProjMatIndex = projectionMatrixIndex
|
||||||
|
, _shdrViewMatIndex = viewMatrixIndex
|
||||||
|
, _shdrModelMatIndex = modelMatrixIndex
|
||||||
|
, _shdrNormalMatIndex = normalMatrixIndex
|
||||||
|
, _shdrTessInnerIndex = tessLevelInner
|
||||||
|
, _shdrTessOuterIndex = tessLevelOuter
|
||||||
|
, _renderedMapTexture = tex
|
||||||
|
, _stateTessellationFactor = tessFac
|
||||||
|
, _stateMap = buf
|
||||||
|
, _mapVert = vertDes
|
||||||
|
, _overviewTexture = overTex
|
||||||
|
, _mapTextures = texts
|
||||||
|
}
|
||||||
|
|
||||||
initHud :: IO GLHud
|
initHud :: IO GLHud
|
||||||
initHud = do
|
initHud = do
|
||||||
@ -193,13 +203,13 @@ renderOverview = do
|
|||||||
DepthAttachment
|
DepthAttachment
|
||||||
Renderbuffer
|
Renderbuffer
|
||||||
(state ^. gl.glRenderbuffer)
|
(state ^. gl.glRenderbuffer)
|
||||||
textureBinding Texture2D $= Just (state ^. gl.glMap.mapTexture)
|
textureBinding Texture2D $= Just (state ^. gl.glMap.renderedMapTexture)
|
||||||
|
|
||||||
framebufferTexture2D
|
framebufferTexture2D
|
||||||
Framebuffer
|
Framebuffer
|
||||||
(ColorAttachment 0)
|
(ColorAttachment 0)
|
||||||
Texture2D
|
Texture2D
|
||||||
(state ^. gl.glMap.mapTexture)
|
(state ^. gl.glMap.renderedMapTexture)
|
||||||
0
|
0
|
||||||
|
|
||||||
-- Render to FrameBufferObject
|
-- Render to FrameBufferObject
|
||||||
@ -285,13 +295,13 @@ render = do
|
|||||||
DepthAttachment
|
DepthAttachment
|
||||||
Renderbuffer
|
Renderbuffer
|
||||||
(state ^. gl.glRenderbuffer)
|
(state ^. gl.glRenderbuffer)
|
||||||
textureBinding Texture2D $= Just (state ^. gl.glMap.mapTexture)
|
textureBinding Texture2D $= Just (state ^. gl.glMap.renderedMapTexture)
|
||||||
|
|
||||||
framebufferTexture2D
|
framebufferTexture2D
|
||||||
Framebuffer
|
Framebuffer
|
||||||
(ColorAttachment 0)
|
(ColorAttachment 0)
|
||||||
Texture2D
|
Texture2D
|
||||||
(state ^. gl.glMap.mapTexture)
|
(state ^. gl.glMap.renderedMapTexture)
|
||||||
0
|
0
|
||||||
|
|
||||||
-- Render to FrameBufferObject
|
-- Render to FrameBufferObject
|
||||||
@ -371,7 +381,7 @@ render = do
|
|||||||
uniform (hud ^. hudTexIndex) $= Index1 (0::GLint)
|
uniform (hud ^. hudTexIndex) $= Index1 (0::GLint)
|
||||||
|
|
||||||
activeTexture $= TextureUnit 1
|
activeTexture $= TextureUnit 1
|
||||||
textureBinding Texture2D $= Just (state ^. gl.glMap.mapTexture)
|
textureBinding Texture2D $= Just (state ^. gl.glMap.renderedMapTexture)
|
||||||
uniform (hud ^. hudBackIndex) $= Index1 (1::GLint)
|
uniform (hud ^. hudBackIndex) $= Index1 (1::GLint)
|
||||||
|
|
||||||
bindBuffer ArrayBuffer $= Just (hud ^. hudVBO)
|
bindBuffer ArrayBuffer $= Just (hud ^. hudVBO)
|
||||||
|
23
src/Types.hs
23
src/Types.hs
@ -74,6 +74,26 @@ data KeyboardState = KeyboardState
|
|||||||
{ _arrowsPressed :: !ArrowKeyState
|
{ _arrowsPressed :: !ArrowKeyState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- | State in which all map-related Data is stored
|
||||||
|
--
|
||||||
|
-- The map itself is rendered with mapProgram and the shaders given here directly
|
||||||
|
-- This does not include any objects on the map - only the map itself
|
||||||
|
--
|
||||||
|
-- _mapTextures must contain the following Textures (in this ordering) after initialisation:
|
||||||
|
--
|
||||||
|
-- 1. Grass
|
||||||
|
--
|
||||||
|
-- 2. Sand
|
||||||
|
--
|
||||||
|
-- 3. Water
|
||||||
|
--
|
||||||
|
-- 4. Stone
|
||||||
|
--
|
||||||
|
-- 5. Snow
|
||||||
|
--
|
||||||
|
-- 6. Dirt (blended on grass)
|
||||||
|
|
||||||
|
|
||||||
data GLMapState = GLMapState
|
data GLMapState = GLMapState
|
||||||
{ _shdrVertexIndex :: !GL.AttribLocation
|
{ _shdrVertexIndex :: !GL.AttribLocation
|
||||||
, _shdrColorIndex :: !GL.AttribLocation
|
, _shdrColorIndex :: !GL.AttribLocation
|
||||||
@ -88,8 +108,9 @@ data GLMapState = GLMapState
|
|||||||
, _stateMap :: !GL.BufferObject
|
, _stateMap :: !GL.BufferObject
|
||||||
, _mapVert :: !GL.NumArrayIndices
|
, _mapVert :: !GL.NumArrayIndices
|
||||||
, _mapProgram :: !GL.Program
|
, _mapProgram :: !GL.Program
|
||||||
, _mapTexture :: !TextureObject
|
, _renderedMapTexture :: !TextureObject --TODO: Probably move to UI?
|
||||||
, _overviewTexture :: !TextureObject
|
, _overviewTexture :: !TextureObject
|
||||||
|
, _mapTextures :: ![TextureObject] --TODO: Fix size on list?
|
||||||
}
|
}
|
||||||
|
|
||||||
data GLHud = GLHud
|
data GLHud = GLHud
|
||||||
|
Loading…
Reference in New Issue
Block a user