Refactor shader code
This commit is contained in:
@@ -10,4 +10,5 @@ void main() {
|
|||||||
if ( d > 1) { discard; }
|
if ( d > 1) { discard; }
|
||||||
fCol = mix (gColE , gColC, d);
|
fCol = mix (gColE , gColC, d);
|
||||||
fPos = vec4(gPos,1);
|
fPos = vec4(gPos,1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,6 +169,10 @@ preloadRender = do
|
|||||||
floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo
|
floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo
|
||||||
tonormalmap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
tonormalmap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
||||||
todiffusemap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
|
todiffusemap <- initTexture2DArray 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
|
||||||
|
|
||||||
|
-- let cloudverxstrd = 16
|
||||||
|
-- cloudvbo <- setupVBO' cloudverxstrd
|
||||||
|
-- cloudshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4,4,4] cloudverxstrd ETriangles floorvbo
|
||||||
-- bind fixed vertex data
|
-- bind fixed vertex data
|
||||||
bufferPokedVBO (snd fsShad) 4
|
bufferPokedVBO (snd fsShad) 4
|
||||||
framebuf2 <- setupTextureFramebuffer 800 600
|
framebuf2 <- setupTextureFramebuffer 800 600
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
module Shader.Compile (
|
module Shader.Compile (
|
||||||
setupVBO,
|
setupVBO,
|
||||||
setupVBO',
|
setupVBO',
|
||||||
|
makeShaderVAOEBO,
|
||||||
makeShader,
|
makeShader,
|
||||||
makeShader4,
|
makeShader4,
|
||||||
makeByteStringShaderUsingVAO,
|
makeByteStringShaderUsingVAO,
|
||||||
@@ -46,6 +47,28 @@ makeShader s shaderlist sizes pm = do
|
|||||||
}
|
}
|
||||||
, vbo)
|
, vbo)
|
||||||
|
|
||||||
|
makeShaderVAOEBO ::
|
||||||
|
-- | First part of the name of the shader
|
||||||
|
String ->
|
||||||
|
-- | shader types
|
||||||
|
[GLenum] ->
|
||||||
|
-- | The input vertex sizes
|
||||||
|
[Int] ->
|
||||||
|
-- | The stride
|
||||||
|
Int ->
|
||||||
|
GLenum ->
|
||||||
|
VBO ->
|
||||||
|
IO (Shader, VAO, EBO)
|
||||||
|
makeShaderVAOEBO s shaderlist sizes strd pm vbo = do
|
||||||
|
prog <- makeSourcedShader s shaderlist
|
||||||
|
vao <- setupVAOvbo sizes strd vbo
|
||||||
|
ebo <- setupEBO vao
|
||||||
|
return
|
||||||
|
( Shader prog pm
|
||||||
|
, vao
|
||||||
|
, ebo
|
||||||
|
)
|
||||||
|
|
||||||
makeShader4 ::
|
makeShader4 ::
|
||||||
-- | First part of the name of the shader
|
-- | First part of the name of the shader
|
||||||
String ->
|
String ->
|
||||||
@@ -181,6 +204,18 @@ setupVAOvbo sizes strd vbo = do
|
|||||||
{ _vaoName = vaoname
|
{ _vaoName = vaoname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupEBO :: VAO -> IO EBO
|
||||||
|
setupEBO vao = do
|
||||||
|
eboptr <- mallocArray numDrawableElements
|
||||||
|
eboname <- mglCreate glCreateBuffers
|
||||||
|
glNamedBufferData
|
||||||
|
eboname
|
||||||
|
( fromIntegral $ glushortSize * numDrawableElements)
|
||||||
|
nullPtr
|
||||||
|
GL_STREAM_DRAW
|
||||||
|
glVertexArrayElementBuffer (vao ^. vaoName) eboname
|
||||||
|
return $ EBO eboname eboptr
|
||||||
|
|
||||||
setupVAOSized :: Int -> [Int] -> IO (VAO,VBO)
|
setupVAOSized :: Int -> [Int] -> IO (VAO,VBO)
|
||||||
setupVAOSized ndraw sizes = do
|
setupVAOSized ndraw sizes = do
|
||||||
vaoname <- mglCreate glCreateVertexArrays
|
vaoname <- mglCreate glCreateVertexArrays
|
||||||
|
|||||||
+8
-4
@@ -5,15 +5,14 @@ module Shader.Data
|
|||||||
( VAO (..)
|
( VAO (..)
|
||||||
, VBO (..)
|
, VBO (..)
|
||||||
, EBO (..)
|
, EBO (..)
|
||||||
-- , FullShader (..)
|
, Shader (..)
|
||||||
, FullShader (..)
|
, FullShader (..)
|
||||||
, ShaderTexture (..)
|
, ShaderTexture (..)
|
||||||
, EPrimitiveMode (..)
|
, EPrimitiveMode (..)
|
||||||
-- | Lens functions
|
-- | Lens functions
|
||||||
, vaoName
|
, vaoName
|
||||||
-- , vaoVBO
|
, shaderUINT
|
||||||
-- , vaoAttribSizes
|
, shaderPrimitive
|
||||||
-- , vaoStride
|
|
||||||
|
|
||||||
, textureObject
|
, textureObject
|
||||||
|
|
||||||
@@ -43,6 +42,10 @@ data FullShader = FullShader
|
|||||||
, _shadPrim' :: EPrimitiveMode
|
, _shadPrim' :: EPrimitiveMode
|
||||||
, _shadTex' :: Maybe ShaderTexture
|
, _shadTex' :: Maybe ShaderTexture
|
||||||
}
|
}
|
||||||
|
data Shader = Shader
|
||||||
|
{ _shaderUINT :: GLuint -- should be shaderID
|
||||||
|
, _shaderPrimitive :: GLenum
|
||||||
|
}
|
||||||
{- | Vertex array object: contains the reference to the object,
|
{- | Vertex array object: contains the reference to the object,
|
||||||
and its buffer targets. -}
|
and its buffer targets. -}
|
||||||
newtype VAO = VAO
|
newtype VAO = VAO
|
||||||
@@ -90,3 +93,4 @@ makeLenses ''VBO
|
|||||||
makeLenses ''FullShader
|
makeLenses ''FullShader
|
||||||
makeLenses ''EBO
|
makeLenses ''EBO
|
||||||
makeLenses ''ShaderTexture
|
makeLenses ''ShaderTexture
|
||||||
|
makeLenses ''Shader
|
||||||
|
|||||||
Reference in New Issue
Block a user