@@ -6,6 +6,7 @@ import Control.Monad
66import Control.Monad.State
77import Data.Char (isUpper)
88import qualified Data.Set as Set
9+import Data.Map (Map)
910import qualified Data.Map as Map
1011import qualified Language.GLSL.Parser as GLP
1112import Language.GLSL.Syntax
@@ -328,14 +329,22 @@ glShader = try (string "[glShader|") >> closeShader "" where
328329 ]
329330
330331data GLTipe = V3 | M4
331−
332−glSource :: String -> Maybe [(StorageQualifier, GLTipe, String)]
332+data GLShaderDecls = GLShaderDecls
333+ { attribute :: Map String GLTipe
334+ , uniform :: Map String GLTipe
335+ , variying :: Map String GLTipe
336+ }
337+
338+--glSource :: String -> Maybe [(StorageQualifier, GLTipe, String)]
339+glSource :: String -> Maybe GLShaderDecls
333340glSource src =
334341 case GLP.parse src of
335342 Right (TranslationUnit decls) ->
336− Just . join . map extractGLinputs $ decls
343+ Just . foldl addGLinput emptyDecls . join . map extractGLinputs $ decls
337344 Left e -> Nothing
338345 where
346+ emptyDecls = GLShaderDecls Map.empty Map.empty Map.empty
347+ addGLinput = error "TODO"
339348 extractGLinputs decl = case decl of
340349 Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
341350 if elem qual [Attribute, Varying, Uniform]