wrote some render-functions and shaders
- rudimentary vertex and fragment-shader in shaders/.. - created new Render-Module (unfinished and untested)
This commit is contained in:
52
src/Render/Render.hs
Normal file
52
src/Render/Render.hs
Normal file
@ -0,0 +1,52 @@
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
module Render.Render where
|
||||
|
||||
import Graphics.Rendering.OpenGL.GL.BufferObjects
|
||||
import Graphics.Rendering.OpenGL.GL.ObjectName
|
||||
import Graphics.Rendering.OpenGL.GL.StateVar
|
||||
import Render.Misc
|
||||
import Graphics.Rendering.OpenGL.Raw.Core31.Types (GLfloat)
|
||||
import Foreign.Storable (sizeOf)
|
||||
import Foreign.Marshal.Array (withArray)
|
||||
import Graphics.Rendering.OpenGL.GL.VertexSpec
|
||||
import Graphics.Rendering.OpenGL.GL.Shaders
|
||||
import Graphics.Rendering.OpenGL.GL.VertexArrays (Capability(..), vertexAttribArray)
|
||||
import qualified Data.ByteString as B
|
||||
|
||||
vertexShaderFile :: String
|
||||
vertexShaderFile = "shaders/vertex.shader"
|
||||
fragmentShaderFile :: String
|
||||
fragmentShaderFile = "shaders/fragment.shader"
|
||||
|
||||
initBuffer :: [GLfloat] -> IO BufferObject
|
||||
initBuffer varray =
|
||||
let
|
||||
sizeOfVarray = length varray * sizeOfComponent
|
||||
sizeOfComponent = sizeOf (head varray)
|
||||
in do
|
||||
bufferObject <- genObjectName
|
||||
bindBuffer ArrayBuffer $= Just bufferObject
|
||||
withArray varray $ \buffer ->
|
||||
bufferData ArrayBuffer $= (fromIntegral sizeOfVarray, buffer, StaticDraw)
|
||||
checkError "initBuffer"
|
||||
return bufferObject
|
||||
|
||||
initShader :: IO (UniformLocation, AttribLocation, AttribLocation)
|
||||
initShader = do
|
||||
! vertexSource <- B.readFile vertexShaderFile
|
||||
! fragmentSource <- B.readFile fragmentShaderFile
|
||||
vertexShader <- compileShaderSource VertexShader vertexSource
|
||||
fragmentShader <- compileShaderSource FragmentShader fragmentSource
|
||||
program <- createProgramUsing [vertexShader, fragmentShader]
|
||||
currentProgram $= Just program
|
||||
|
||||
projectionMatrixIndex <- get (uniformLocation program "fg_ProjectionMatrix")
|
||||
|
||||
colorIndex <- get (attribLocation program "fg_Color")
|
||||
vertexAttribArray colorIndex $= Enabled
|
||||
|
||||
vertexIndex <- get (attribLocation program "fg_Vertex")
|
||||
vertexAttribArray vertexIndex $= Enabled
|
||||
|
||||
checkError "initShader"
|
||||
return (projectionMatrixIndex, colorIndex, vertexIndex)
|
Reference in New Issue
Block a user