@@ -7,6 +7,8 @@ import 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
9import qualified Data.Map as Map
10+import qualified Language.GLSL.Parser as GLP
11+import Language.GLSL.Syntax
10import SourceSyntax.Helpers as Help
12import SourceSyntax.Helpers as Help
11import SourceSyntax.Location as Location
13import SourceSyntax.Location as Location
12import SourceSyntax.Expression
14import SourceSyntax.Expression
@@ -324,3 +326,22 @@ glShader = try (string "[glShader|") >> closeShader "" where
324 c <- anyChar
326 c <- anyChar
325 closeShader (src ++ [c])
327 closeShader (src ++ [c])
330+data GLTipe = V3 | M4
332+glSource :: String -> Maybe [(StorageQualifier, GLTipe, String)]
334+ case GLP.parse src of
335+ Right (TranslationUnit decls) ->
336+ Just . join . map extractGLinputs $ decls
339+ extractGLinputs decl = case decl of
340+ Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
341+ if elem qual [Attribute, Varying, Uniform]
343+ Vec3 -> return (qual,V3,name)
344+ Mat4 -> return (qual,M4,name)