@@ -6,6 +6,7 @@ import Control.Monad
6import Control.Monad.State
6import Control.Monad.State
7import Data.Char (isUpper)
7import Data.Char (isUpper)
8import qualified Data.Set as Set
8import qualified Data.Set as Set
9import qualified Data.Map as Map
10import qualified Data.Map as Map
10import qualified Language.GLSL.Parser as GLP
11import qualified Language.GLSL.Parser as GLP
11import Language.GLSL.Syntax
12import Language.GLSL.Syntax
@@ -328,14 +329,22 @@ glShader = try (string "[glShader|") >> closeShader "" where
330data GLTipe = V3 | M4
331data GLTipe = V3 | M4
331−
332+data GLShaderDecls = GLShaderDecls
333+ { attribute :: Map String GLTipe
334+ , uniform :: Map String GLTipe
335+ , variying :: Map String GLTipe
332−glSource :: String -> Maybe [(StorageQualifier, GLTipe, String)]
338+--glSource :: String -> Maybe [(StorageQualifier, GLTipe, String)]
339+glSource :: String -> Maybe GLShaderDecls
333glSource src =
340glSource src =
334 case GLP.parse src of
341 case GLP.parse src of
335 Right (TranslationUnit decls) ->
342 Right (TranslationUnit decls) ->
336− Just . join . map extractGLinputs $ decls
343+ Just . foldl addGLinput emptyDecls . join . map extractGLinputs $ decls
337 Left e -> Nothing
344 Left e -> Nothing
346+ emptyDecls = GLShaderDecls Map.empty Map.empty Map.empty
347+ addGLinput = error "TODO"
339 extractGLinputs decl = case decl of
348 extractGLinputs decl = case decl of
340 Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
349 Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
341 if elem qual [Attribute, Varying, Uniform]
350 if elem qual [Attribute, Varying, Uniform]