Refactor shader code
This commit is contained in:
@@ -10,4 +10,5 @@ void main() {
|
||||
if ( d > 1) { discard; }
|
||||
fCol = mix (gColE , gColC, d);
|
||||
fPos = vec4(gPos,1);
|
||||
|
||||
}
|
||||
|
||||
@@ -169,6 +169,10 @@ preloadRender = do
|
||||
floorshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4] floorverxstrd ETriangles floorvbo
|
||||
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"
|
||||
|
||||
-- let cloudverxstrd = 16
|
||||
-- cloudvbo <- setupVBO' cloudverxstrd
|
||||
-- cloudshader <- makeShader4 "floor/arrayPos" [vert, frag] [4,4,4,4] cloudverxstrd ETriangles floorvbo
|
||||
-- bind fixed vertex data
|
||||
bufferPokedVBO (snd fsShad) 4
|
||||
framebuf2 <- setupTextureFramebuffer 800 600
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
module Shader.Compile (
|
||||
setupVBO,
|
||||
setupVBO',
|
||||
makeShaderVAOEBO,
|
||||
makeShader,
|
||||
makeShader4,
|
||||
makeByteStringShaderUsingVAO,
|
||||
@@ -46,6 +47,28 @@ makeShader s shaderlist sizes pm = do
|
||||
}
|
||||
, 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 ::
|
||||
-- | First part of the name of the shader
|
||||
String ->
|
||||
@@ -181,6 +204,18 @@ setupVAOvbo sizes strd vbo = do
|
||||
{ _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 ndraw sizes = do
|
||||
vaoname <- mglCreate glCreateVertexArrays
|
||||
|
||||
+8
-4
@@ -5,15 +5,14 @@ module Shader.Data
|
||||
( VAO (..)
|
||||
, VBO (..)
|
||||
, EBO (..)
|
||||
-- , FullShader (..)
|
||||
, Shader (..)
|
||||
, FullShader (..)
|
||||
, ShaderTexture (..)
|
||||
, EPrimitiveMode (..)
|
||||
-- | Lens functions
|
||||
, vaoName
|
||||
-- , vaoVBO
|
||||
-- , vaoAttribSizes
|
||||
-- , vaoStride
|
||||
, shaderUINT
|
||||
, shaderPrimitive
|
||||
|
||||
, textureObject
|
||||
|
||||
@@ -43,6 +42,10 @@ data FullShader = FullShader
|
||||
, _shadPrim' :: EPrimitiveMode
|
||||
, _shadTex' :: Maybe ShaderTexture
|
||||
}
|
||||
data Shader = Shader
|
||||
{ _shaderUINT :: GLuint -- should be shaderID
|
||||
, _shaderPrimitive :: GLenum
|
||||
}
|
||||
{- | Vertex array object: contains the reference to the object,
|
||||
and its buffer targets. -}
|
||||
newtype VAO = VAO
|
||||
@@ -90,3 +93,4 @@ makeLenses ''VBO
|
||||
makeLenses ''FullShader
|
||||
makeLenses ''EBO
|
||||
makeLenses ''ShaderTexture
|
||||
makeLenses ''Shader
|
||||
|
||||
Reference in New Issue
Block a user