Get shape shader working using vertex pulling
Seems slow, will try to improve
This commit is contained in:
+20
-7
@@ -1,14 +1,27 @@
|
|||||||
#version 450 core
|
#version 450 core
|
||||||
layout (location = 0) in vec4 pos;
|
struct PosColNorm { vec4 pos; uint col; vec4 norm; };
|
||||||
layout (location = 1) in vec4 col;
|
|
||||||
layout (location = 2) in vec4 norm;
|
|
||||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
|
layout (std430, binding = 3) readonly buffer Data { PosColNorm data[]; };
|
||||||
|
layout (std430, binding = 4) readonly buffer Indices { uint indices[]; };
|
||||||
out vec4 vCol;
|
out vec4 vCol;
|
||||||
out vec4 vPos;
|
out vec4 vPos;
|
||||||
out vec4 vNorm;
|
out vec4 vNorm;
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = theMat * vec4(pos.xyz,1);
|
vPos = data[indices[gl_VertexID]].pos;
|
||||||
vCol = col;
|
vCol = unpackUnorm4x8(data[indices[gl_VertexID]].col);
|
||||||
vPos = pos;
|
vNorm = data[indices[gl_VertexID]].norm;
|
||||||
vNorm = norm;
|
gl_Position = theMat * vec4(vPos.xyz,1);
|
||||||
}
|
}
|
||||||
|
//layout (location = 0) in vec4 pos;
|
||||||
|
//layout (location = 1) in vec4 col;
|
||||||
|
//layout (location = 2) in vec4 norm;
|
||||||
|
//layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
|
//out vec4 vCol;
|
||||||
|
//out vec4 vPos;
|
||||||
|
//out vec4 vNorm;
|
||||||
|
//void main() {
|
||||||
|
// gl_Position = theMat * vec4(pos.xyz,1);
|
||||||
|
// vCol = col;
|
||||||
|
// vPos = pos;
|
||||||
|
// vNorm = norm;
|
||||||
|
//}
|
||||||
|
|||||||
+7
-6
@@ -176,12 +176,13 @@ doDrawing' win pdata u = do
|
|||||||
--draw object shapes onto base buffer
|
--draw object shapes onto base buffer
|
||||||
let fs = _shapeShader pdata
|
let fs = _shapeShader pdata
|
||||||
glUseProgram (_shaderUINT fs)
|
glUseProgram (_shaderUINT fs)
|
||||||
glBindVertexArray $ fs ^. shaderVAO . vaoName
|
-- glBindVertexArray $ fs ^. shaderVAO . vaoName
|
||||||
glDrawElements
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nIndices)
|
||||||
(_unPrimitiveMode $ _shaderPrimitive fs)
|
-- glDrawElements
|
||||||
(fromIntegral nIndices)
|
-- (_unPrimitiveMode $ _shaderPrimitive fs)
|
||||||
GL_UNSIGNED_INT
|
-- (fromIntegral nIndices)
|
||||||
nullPtr
|
-- GL_UNSIGNED_INT
|
||||||
|
-- nullPtr
|
||||||
-- draw chasm shader blocking floor
|
-- draw chasm shader blocking floor
|
||||||
glUseProgram (pdata ^. chasmShader . shaderUINT)
|
glUseProgram (pdata ^. chasmShader . shaderUINT)
|
||||||
glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName
|
glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName
|
||||||
|
|||||||
@@ -82,14 +82,12 @@ preloadRender = do
|
|||||||
shEBO <- setupEBO shPosVAO
|
shEBO <- setupEBO shPosVAO
|
||||||
-- note the shape shader vao is distinct from the position vao, but they
|
-- note the shape shader vao is distinct from the position vao, but they
|
||||||
-- share an EBO
|
-- share an EBO
|
||||||
|
-- shapeshader <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxAttributes
|
||||||
|
-- pmTriangles
|
||||||
|
-- shVBO
|
||||||
|
-- glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName)
|
||||||
shapeshader <-
|
shapeshader <-
|
||||||
makeShaderUsingVBO
|
makeShaderUsingVAO "shape/basic" [vert, frag] pmTriangles (VAO dummyvao)
|
||||||
"shape/basic"
|
|
||||||
[vert, frag]
|
|
||||||
shapeVerxAttributes
|
|
||||||
pmTriangles
|
|
||||||
shVBO
|
|
||||||
glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName)
|
|
||||||
|
|
||||||
putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
|
putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
|
||||||
-- winvbo <- setupVBO (floatSize * 8)
|
-- winvbo <- setupVBO (floatSize * 8)
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ bufferEBO :: UintBO -> Int -> IO ()
|
|||||||
bufferEBO x i =
|
bufferEBO x i =
|
||||||
glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
|
glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
|
||||||
|
|
||||||
--bufferFloatBO :: VBO -> Int -> IO ()
|
|
||||||
--bufferFloatBO x i = undefined
|
|
||||||
-- glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
|
|
||||||
|
|
||||||
bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||||
bufferShaderLayers shads counts = MV.imapM_ f shads
|
bufferShaderLayers shads counts = MV.imapM_ f shads
|
||||||
where
|
where
|
||||||
|
|||||||
Reference in New Issue
Block a user