]> git.draconx.ca Git - vimconf.git/commitdiff
Add GLSL syntax highlighting.
authorNick Bowler <nbowler@elliptictech.com>
Tue, 20 Jul 2010 15:31:32 +0000 (11:31 -0400)
committerNick Bowler <nbowler@elliptictech.com>
Wed, 18 Aug 2010 15:09:10 +0000 (11:09 -0400)
I'm not particularly fond of these highlighting scripts, but they're
better than nothing.

ftplugin/glsl.vim [new file with mode: 0644]
syntax/glsl.vim [new file with mode: 0644]
syntax/glsl330.vim [new file with mode: 0644]
syntax/glsl400.vim [new file with mode: 0644]
vimrc

diff --git a/ftplugin/glsl.vim b/ftplugin/glsl.vim
new file mode 100644 (file)
index 0000000..04022de
--- /dev/null
@@ -0,0 +1,13 @@
+" TODO: #version appears exactly once in the file, before any non-whitespace
+" (i.e. possibly after a length comment).  Checking only the first 10 lines
+" is an incorrect hack.
+for item in getline(1,10)
+       if item =~ "#version 400"
+               execute ':set syntax=glsl400'
+               break
+       endif
+       if item =~ "#version 330"
+               execute ':set syntax=glsl330'
+               break
+       endif
+endfor
diff --git a/syntax/glsl.vim b/syntax/glsl.vim
new file mode 100644 (file)
index 0000000..bd04b1e
--- /dev/null
@@ -0,0 +1,265 @@
+" Vim syntax file the OpenGL Shading Language
+" Language:     GLSL
+" Author:       Nathan Cournia <nathan@cournia.com>
+" Date:         June 30, 2004
+" File Types:   .frag .vert .glsl .fp .vp
+" Version:      1.10.00
+" Notes:        Adapted from c.vim - Bram Moolenaar <bram.vim.org>
+"               Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" a bunch of useful keywords
+syn keyword         glslConditional     if else
+syn keyword         glslStatement       break return continue discard
+syn keyword         glslRepeat          while for do
+syn keyword         glslTodo            contained TODO FIXME XXX
+
+" glslCommentGroup allows adding matches for special things in comments
+syn cluster         glslCommentGroup    contains=glslTodo
+
+"catch errors caused by wrong parenthesis and brackets
+syn cluster         glslParenGroup      contains=glslParenError,glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslCommentSkip,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom
+if exists("c_no_bracket_error")
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString
+  syn match         glslParenError      display ")"
+  syn match         glslErrInParen      display contained "[{}]"
+else
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString
+  syn match         glslParenError      display "[\])]"
+  syn match         glslErrInParen      display contained "[\]{}]"
+  syn region        glslBracket         transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString
+  " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppBracket      transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString
+  syn match         glslErrInBracket    display contained "[);{}]"
+endif
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match           glslNumbers         display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal
+" Same, but without octal error (for comments)
+syn match           glslNumbersCom      display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal
+syn match           glslNumber          display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match           glslNumber          display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match           glslOctal           display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero
+syn match           glslOctalZero       display contained "\<0"
+syn match           glslFloat           display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match           glslFloat           display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match           glslFloat           display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match           glslFloat           display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn match           glslOctalError      display contained "0\o*[89]\d*"
+syn case match
+
+if exists("c_comment_strings")
+  " A comment can contain glslString, glslCharacter and glslNumber.
+  " But a "*/" inside a glslString in a glslComment DOES end the comment!  So we
+  " need to use a special type of glslString: glslCommentString, which also ends on
+  " "*/", and sees a "*" at the start of the line as glslomment again.
+  " Unfortunately this doesn't very well work for // type of comments :-(
+  syntax match      glslCommentSkip     contained "^\s*\*\($\|\s\+\)"
+  syntax region     glslCommentString   contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=glslSpecial,glslCommentSkip
+  syntax region     glslComment2String  contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=glslSpecial
+  syntax region     glslCommentL        start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslComment2String,glslCharacter,glslNumbersCom,glslSpaceError
+  syntax region     glslComment         matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError
+else
+  syn region        glslCommentL        start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError
+  syn region        glslComment         matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError
+endif
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match        glslCommentError        display "\*/"
+syntax match        glslCommentStartError   display "/\*"me=e-1 contained
+
+syn keyword        glslType                void
+syn keyword        glslType                bool  bvec2 bvec3 bvec4
+syn keyword        glslType                int   ivec2 ivec3 ivec4
+syn keyword        glslType                float vec2  vec3  vec4
+syn keyword        glslType                mat2  mat3  mat4
+syn keyword        glslType                sampler1D sampler2D sampler3D samplerCUBE sampler1DShadow sampler2DShadow
+
+syn keyword        glslStructure           struct
+
+syn keyword        glslStorageClass        const attribute varying uniform
+syn keyword        glslStorageClass        in out inout
+
+syn keyword        glslConstant            __LINE__ __FILE__ __VERSION__
+
+syn keyword        glslConstant            true false
+
+syn region         glslPreCondit           start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError
+syn match          glslPreCondit           display "^\s*#\s*\(else\|endif\)\>"
+syn region         glslCppOut              start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2
+syn region         glslCppOut2             contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip
+syn region         glslCppSkip             contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip
+"syn match glslLineSkip        "\\$"
+syn cluster        glslPreProglslGroup     contains=glslPreCondit,glslIncluded,glslInclude,glslDefine,glslErrInParen,glslErrInBracket,glslUserLabel,glslSpecial,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslString,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslParen,glslBracket,glslMulti
+syn region         glslDefine              start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup
+syn region         glslPreProc             start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup
+
+" Highlight User Labels
+syn cluster        glslMultiGroup          contains=glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslCppParen,glslCppBracket,glslCppString
+syn region         glslMulti               transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn cluster        glslLabelGroup          contains=glslUserLabel
+syn match          glslUserCont            display "^\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match          glslUserCont            display ";\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match          glslUserCont            display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+syn match          glslUserCont            display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+
+syn match          glslUserLabel           display "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match          glslBitField            display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match          glslBitField            display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+syn keyword        glslState               gl_Position gl_PointSize gl_ClipVertex
+syn keyword        glslState               gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth
+
+" vertex attributes
+syn keyword        glslState               gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_FogCoord
+syn match          glslState               display "gl_MultiTexCoord\d\+"
+
+" varying variables
+syn keyword        glslState               gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord
+
+" uniforms
+syn keyword        glslUniform             gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_TextureMatrix
+syn keyword        glslUniform             gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial
+syn keyword        glslUniform             gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct
+syn keyword        glslUniform             gl_FrontLightProduct gl_BackLightProduct glTextureEnvColor
+syn keyword        glslUniform             gl_TextureEnvColor gl_Fog
+syn match          glslUniform             display "gl_EyePlane[STRQ]"
+syn match          glslUniform             display "gl_ObjectPlane[STRQ]"
+syn keyword        glslUniform             gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse 
+syn keyword        glslUniform             gl_TextureMatrixInverse gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose
+syn keyword        glslUniform             gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose
+syn keyword        glslUniform             gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose
+
+" uniform types
+syn keyword        glslType                gl_DepthRangeParameters gl_PointParameters gl_MaterialParameters
+syn keyword        glslType                gl_LightSourceParameters gl_LightModelParameters gl_LightModelProducts
+syn keyword        glslType                gl_LightProducts gl_FogParameters
+
+" constants
+syn keyword        glslConstant            gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs
+syn keyword        glslConstant            gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits
+syn keyword        glslConstant            gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents 
+syn keyword        glslConstant            gl_MaxDrawBuffers
+
+" swizzling
+syn match          glslSwizzle             /\.[xyzw]\{1,4\}\>/
+syn match          glslSwizzle             /\.[rgba]\{1,4\}\>/
+syn match          glslSwizzle             /\.[stpq]\{1,4\}\>/
+
+" built in functions
+syn keyword        glslFunc                radians degrees sin cos tan asin acos atan pow exp2 log2 sqrt inversesqrt
+syn keyword        glslFunc                abs sign floor ceil fract mod min max clamp mix step smoothstep 
+syn keyword        glslFunc                length distance dot cross normalize ftransform faceforward reflect
+syn keyword        glslFunc                matrixcompmult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not
+syn keyword        glslFunc                texture1D texture1DProj texture1DLod texture1DProjLod
+syn keyword        glslFunc                texture2D texture2DProj texture2DLod texture2DProjLod
+syn keyword        glslFunc                texture3D texture3DProj texture3DLod texture3DProjLod
+syn keyword        glslFunc                textureCube textureCubeLod
+syn keyword        glslFunc                shadow1D shadow1DProj shadow1DLod shadow1DProjLod
+syn keyword        glslFunc                shadow2D shadow2DProj shadow2DLod shadow2DProjLod
+syn keyword        glslFunc                dFdx dFdy fwidth noise1 noise2 noise3 noise4
+syn keyword        glslFunc                refract exp log
+
+" highlight unsupported keywords
+syn keyword        glslUnsupported         asm
+syn keyword        glslUnsupported         class union enum typedef template this packed
+syn keyword        glslUnsupported         goto switch default
+syn keyword        glslUnsupported         inline noinline volatile public static extern external interface
+syn keyword        glslUnsupported         long short double half fixed unsigned
+syn keyword        glslUnsupported         input output
+syn keyword        glslUnsupported         hvec2 hvec3 hvec4 dvec2 dvec3 dvec4 fvec2 fvec3 fvec4 
+syn keyword        glslUnsupported         sampler2DRect sampler3DRect sampler2DRectShadow
+syn keyword        glslUnsupported         sizeof cast
+syn keyword        glslUnsupported         namespace using
+
+"wtf?
+"let b:c_minlines = 50        " #if 0 constructs can be long
+"exec "syn sync ccomment glslComment minlines=" . b:c_minlines
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_glsl_syn_inits")
+  if version < 508
+    let did_glsl_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink glslFormat                   glslSpecial
+  HiLink glslCppString                glslString
+  HiLink glslCommentL                 glslComment
+  HiLink glslCommentStart             glslComment
+  HiLink glslLabel                    Label
+  HiLink glslUserLabel                Label
+  HiLink glslConditional              Conditional
+  HiLink glslRepeat                   Repeat
+  HiLink glslCharacter                Character
+  HiLink glslSpecialCharacter         glslSpecial
+  HiLink glslNumber                   Number
+  HiLink glslOctal                    Number
+  HiLink glslOctalZero                PreProc         " link this to Error if you want
+  HiLink glslFloat                    Float
+  HiLink glslOctalError               glslError
+  HiLink glslParenError               glslError
+  HiLink glslErrInParen               glslError
+  HiLink glslErrInBracket             glslError
+  HiLink glslCommentError             glslError
+  HiLink glslCommentStartError        glslError
+  HiLink glslSpaceError               glslError
+  HiLink glslSpecialError             glslError
+  HiLink glslOperator                 Operator
+  HiLink glslStructure                Structure
+  HiLink glslStorageClass             StorageClass
+  HiLink glslInclude                  Include
+  HiLink glslPreProc                  PreProc
+  HiLink glslDefine                   Macro
+  HiLink glslIncluded                 glslString
+  HiLink glslError                    Error
+  HiLink glslStatement                Statement
+  HiLink glslPreCondit                PreCondit
+  HiLink glslType                     Type
+  HiLink glslConstant                 Constant
+  HiLink glslCommentString            glslString
+  HiLink glslComment2String           glslString
+  HiLink glslCommentSkip              glslComment
+  HiLink glslString                   String
+  HiLink glslComment                  Comment
+  HiLink glslSpecial                  SpecialChar
+  HiLink glslSwizzle                  SpecialChar
+  HiLink glslTodo                     Todo
+  HiLink glslCppSkip                  glslCppOut
+  HiLink glslCppOut2                  glslCppOut
+  HiLink glslCppOut                   Comment
+  HiLink glslUniform                  glslType
+  HiLink glslState                    glslType
+  HiLink glslFunc                     glslStatement
+  HiLink glslUnsupported              glslError
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "glsl"
+
+" vim: ts=8
diff --git a/syntax/glsl330.vim b/syntax/glsl330.vim
new file mode 100644 (file)
index 0000000..43dd3b6
--- /dev/null
@@ -0,0 +1,313 @@
+" Vim syntax file the OpenGL Shading Language
+" Language:     GLSL 400
+" Author:       Kamil Patelczyk <patelczyk@gmail.com>
+" Date:         July 17, 2010
+" File Types:   .glsl
+" Version:      1
+" Notes:        Adapted from c.vim - Bram Moolenaar <bram.vim.org>
+"               Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
+"               Adapted from glsl.vim - Nathan Cournia <nathan@cournia.com>
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" glslCommentGroup allows adding matches for special things in comments
+syn cluster         glslCommentGroup    contains=glslTodo
+
+"catch errors caused by wrong parenthesis and brackets
+syn cluster         glslParenGroup      contains=glslParenError,glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslCommentSkip,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslLayoutQual
+if exists("c_no_bracket_error")
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString
+  syn match         glslParenError      display ")"
+  syn match         glslErrInParen      display contained "[{}]"
+else
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString
+  syn match         glslParenError      display "[\])]"
+  syn match         glslErrInParen      display contained "[\]{}]"
+  syn region        glslBracket         transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString
+  " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppBracket      transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString
+  syn match         glslErrInBracket    display contained "[);{}]"
+endif
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match           glslNumbers         display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal
+" Same, but without octal error (for comments)
+syn match           glslNumbersCom      display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal
+syn match           glslNumber          display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match           glslNumber          display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match           glslOctal           display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero
+syn match           glslOctalZero       display contained "\<0"
+syn match           glslFloat           display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match           glslFloat           display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match           glslFloat           display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match           glslFloat           display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn match           glslOctalError      display contained "0\o*[89]\d*"
+syn case match
+
+if exists("c_comment_strings")
+  " A comment can contain glslString, glslCharacter and glslNumber.
+  " But a "*/" inside a glslString in a glslComment DOES end the comment!  So we
+  " need to use a special type of glslString: glslCommentString, which also ends on
+  " "*/", and sees a "*" at the start of the line as glslomment again.
+  " Unfortunately this doesn't very well work for // type of comments :-(
+  syntax match      glslCommentSkip         contained "^\s*\*\($\|\s\+\)"
+  syntax region     glslCommentString       contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=glslSpecial,glslCommentSkip
+  syntax region     glslComment2String      contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=glslSpecial
+  syntax region     glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslComment2String,glslCharacter,glslNumbersCom,glslSpaceError
+  syntax region     glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError
+else                                        
+  syn region        glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError
+  syn region        glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError
+endif
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match        glslCommentError        display "\*/"
+syntax match        glslCommentStartError   display "/\*"me=e-1 contained
+
+syn region          glslPreCondit           start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError
+syn match           glslPreCondit           display "^\s*#\s*\(else\|endif\)\>"
+syn region          glslCppOut              start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2
+syn region          glslCppOut2             contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip
+syn region          glslCppSkip             contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip
+"syn match glslLineSkip        "\\$"
+syn cluster         glslPreProglslGroup     contains=glslPreCondit,glslIncluded,glslInclude,glslDefine,glslErrInParen,glslErrInBracket,glslUserLabel,glslSpecial,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslString,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslParen,glslBracket,glslMulti
+syn region          glslDefine              start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup
+syn region          glslPreProc             start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup
+
+" Highlight User Labels
+syn cluster         glslMultiGroup          contains=glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslCppParen,glslCppBracket,glslCppString
+syn region          glslMulti               transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn cluster         glslLabelGroup          contains=glslUserLabel
+syn match           glslUserCont            display "^\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match           glslUserCont            display ";\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match           glslUserCont            display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+syn match           glslUserCont            display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+
+syn match           glslUserLabel           display "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match           glslBitField            display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match           glslBitField            display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+
+" Keywords and simple stuff 
+syn keyword         glslTodo                contained TODO FIXME XXX
+
+syn keyword         glslStorageClass        const uniform
+syn keyword         glslStorageClass        in out inout
+syn keyword         glslStorageClass        centroid flat smooth noperspective
+syn keyword         glslStorageClass        lowp mediump highp precision
+syn keyword         glslStorageClass        invariant
+
+syn match           glslLayout              /\<layout\s*(\_.\{-})/hs=s,he=s+6 contains=glslLayoutQual,glslNumber
+                                            
+syn keyword         glslStorageClassDeprec  attribute varying
+
+syn keyword         glslLayoutQual          contained shared packed std140 row_major column_major 
+syn keyword         glslLayoutQual          contained index line_strip lines lines_adjacency location
+syn keyword         glslLayoutQual          contained max_vertices origin_upper_left pixel_center_integer points
+syn keyword         glslLayoutQual          contained triangle_strip triangles triangles_adjacency
+
+syn keyword         glslStatement           break continue discard return
+syn keyword         glslRepeat              while for do
+syn keyword         glslConditional         if else switch
+syn keyword         glslLabel               case default
+                                            
+syn keyword         glslConstant            true false
+syn keyword         glslConstant            __LINE__ __FILE__ __VERSION__
+                                            
+syn keyword         glslType                uint uvec2 uvec3 uvec4
+syn keyword         glslType                float int void bool
+syn keyword         glslType                mat2 mat3 mat4
+syn keyword         glslType                mat2x2 mat2x3 mat2x4
+syn keyword         glslType                mat3x2 mat3x3 mat3x4
+syn keyword         glslType                mat4x2 mat4x3 mat4x4
+syn keyword         glslType                vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4
+syn keyword         glslType                sampler1D sampler2D sampler3D samplerCube 
+syn keyword         glslType                sampler1DShadow sampler2DShadow samplerCubeShadow
+syn keyword         glslType                sampler1DArray sampler2DArray
+syn keyword         glslType                sampler1DArrayShadow sampler2DArrayShadow
+syn keyword         glslType                isampler1D isampler2D isampler3D isamplerCube
+syn keyword         glslType                isampler1DArray isampler2DArray
+syn keyword         glslType                usampler1D usampler2D usampler3D usamplerCube
+syn keyword         glslType                usampler1DArray usampler2DArray
+syn keyword         glslType                sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
+syn keyword         glslType                samplerBuffer isamplerBuffer usamplerBuffer
+syn keyword         glslType                sampler2DMS isampler2DMS usampler2DMS
+syn keyword         glslType                sampler2DMSArray isampler2DMSArray usampler2DMSArray
+                                            
+syn keyword         glslStructure           struct
+                                            
+" Swizzling                                  
+syn match           glslSwizzle             /\.[xyzw]\{1,4\}\>/
+syn match           glslSwizzle             /\.[rgba]\{1,4\}\>/
+syn match           glslSwizzle             /\.[stpq]\{1,4\}\>/
+                                            
+" Builtin variables
+syn keyword         glslState               gl_FragCoord gl_FrontFacing gl_PointCoord gl_FragDepth
+syn keyword         glslState               gl_VertexID gl_InstanceID gl_Position gl_PointSize
+syn keyword         glslState               gl_PrimitiveIDIn gl_PrimitiveID gl_Layer
+syn keyword         glslState               gl_ClipDistance gl_in
+
+syn keyword         glslStateDeprec         gl_FragColor gl_FragData gl_TexCoord
+syn keyword         glslStateDeprec         gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FogFragCoord
+syn keyword         glslStateDeprec         gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2
+syn keyword         glslStateDeprec         gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord
+
+" Uniforms variables
+syn keyword         glslUniform             gl_DepthRange
+
+syn keyword         glslUniformDeprec       gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_NormalScale
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose 
+syn keyword         glslUniformDeprec       gl_Point gl_FrontMaterial gl_BackMaterial gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_Fog
+syn keyword         glslUniformDeprec       gl_BackLightProduct gl_ClipPlane gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT
+syn keyword         glslUniformDeprec       gl_FrontLightProduct gl_LightSource gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS
+syn keyword         glslUniformDeprec       gl_ObjectPlaneT gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixInverse
+syn keyword         glslUniformDeprec       gl_TextureMatrixTranspose gl_TextureMatrix
+
+" Builtin constants
+syn keyword         glslConstant            gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents
+syn keyword         glslConstant            gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
+syn keyword         glslConstant            gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers
+syn keyword         glslConstant            gl_MaxClipDistances gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents
+syn keyword         glslConstant            gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents
+
+syn keyword         glslConstantDeprec      gl_MaxVaryingFloats gl_MaxVaryingComponents
+syn keyword         glslConstantDeprec      gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes
+
+" Built in functions                         
+syn keyword         glslFunc                abs acos acosh asin asinh atan atanh ceil cos cosh degrees exp exp2 floor fract inversesqrt log
+syn keyword         glslFunc                log2 max min mod modf pow radians round roundEven sign sin sinh sqrt tan tanh trunc
+syn keyword         glslFunc                clamp cross distance dot floatBitsToInt floatBitsToUint intBitsToFloat isinf isnan
+syn keyword         glslFunc                length mix normalize smoothstep step
+syn keyword         glslFunc                all any determinant equal faceforward
+syn keyword         glslFunc                greaterThan greaterThanEqual imulExtended inverse lessThan lessThanEqual matrixCompMult 
+syn keyword         glslFunc                not notEqual outerProduct reflect refract transpose 
+syn keyword         glslFunc                textureSize texture textureProj textureLod textureOffset texelFetch texelFetchOffset
+syn keyword         glslFunc                textureProjOffset textureLodOffset textureProjLod textureProjLodOffset textureGrad textureGradOffset
+syn keyword         glslFunc                textureProjGrad textureProjGradOffset 
+syn keyword         glslFunc                dFdx dFdy fwidth
+syn keyword         glslFunc                noise1 noise2 noise3 noise4
+syn keyword         glslFunc                EmitVertex EndPrimitive
+
+syn keyword         glslFuncDeprec          ftransform
+syn keyword         glslFuncDeprec          texture1D texture1DProj texture1DProj texture1DLod texture1DProjLod texture1DProjLod texture2D 
+syn keyword         glslFuncDeprec          texture2DProj texture2DProj texture2DLod texture2DProjLod texture2DProjLod texture3D texture3DProj 
+syn keyword         glslFuncDeprec          texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj 
+syn keyword         glslFuncDeprec          shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod
+
+
+" Highlight unsupported keywords             
+syn keyword         glslUnsupported         asm
+syn keyword         glslUnsupported         class union enum typedef template this packed 
+syn keyword         glslUnsupported         common partition active
+syn keyword         glslUnsupported         filter 
+syn keyword         glslUnsupported         goto 
+syn keyword         glslUnsupported         hvec2 hvec3 hvec4 fvec2 fvec3 fvec4
+syn keyword         glslUnsupported         iimage1D iimage2D iimage3D iimageCube 
+syn keyword         glslUnsupported         iimage1DArray iimage2DArray uimage1DArray uimage2DArray
+syn keyword         glslUnsupported         image1D image2D image3D imageCube 
+syn keyword         glslUnsupported         image1DArray image2DArray 
+syn keyword         glslUnsupported         image1DArrayShadow image2DArrayShadow
+syn keyword         glslUnsupported         image1DShadow image2DShadow
+syn keyword         glslUnsupported         imageBuffer iimageBuffer uimageBuffer
+syn keyword         glslUnsupported         inline noinline volatile public static extern external interface
+syn keyword         glslUnsupported         input output
+syn keyword         glslUnsupported         long short half fixed unsigned superp
+syn keyword         glslUnsupported         namespace using
+syn keyword         glslUnsupported         sampler3DRect 
+syn keyword         glslUnsupported         sizeof cast
+syn keyword         glslUnsupported         uimage1D uimage2D uimage3D uimageCube 
+syn keyword         glslUnsupported         double dvec2 dvec3 dvec4
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_glsl_syn_inits")
+  if version < 508
+    let did_glsl_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink glslCharacter                Character
+  HiLink glslComment                  Comment
+  HiLink glslComment2String           glslString
+  HiLink glslCommentError             glslError
+  HiLink glslCommentL                 glslComment
+  HiLink glslCommentSkip              glslComment
+  HiLink glslCommentStart             glslComment
+  HiLink glslCommentStartError        glslError
+  HiLink glslCommentString            glslString
+  HiLink glslCppOut                   Comment
+  HiLink glslCppOut2                  glslCppOut
+  HiLink glslCppSkip                  glslCppOut
+  HiLink glslCppString                glslString
+  HiLink glslDefine                   Macro
+  HiLink glslErrInBracket             glslError
+  HiLink glslErrInParen               glslError
+  HiLink glslError                    Error
+  HiLink glslFloat                    Float
+  HiLink glslFormat                   glslSpecial
+  HiLink glslInclude                  Include
+  HiLink glslIncluded                 glslString
+  HiLink glslNumber                   Number
+  HiLink glslOctal                    Number
+  HiLink glslOctalError               glslError
+  HiLink glslOctalZero                PreProc
+  HiLink glslOperator                 Operator
+  HiLink glslParenError               glslError
+  HiLink glslPreCondit                PreCondit
+  HiLink glslPreProc                  PreProc
+  HiLink glslSpaceError               glslError
+  HiLink glslSpecial                  SpecialChar
+  HiLink glslSpecialCharacter         glslSpecial
+  HiLink glslSpecialError             glslError
+  HiLink glslString                   String
+
+  HiLink glslConditional              Conditional
+  HiLink glslConstant                 Constant
+  HiLink glslFunc                     glslStatement
+  HiLink glslFuncDeprec               WarningMsg
+  HiLink glslLabel                    Label
+  HiLink glslLayoutQual               glslFunc
+  HiLink glslRepeat                   Repeat
+  HiLink glslState                    glslType
+  HiLink glslStateDeprec              WarningMsg
+  HiLink glslStatement                Statement
+  HiLink glslStorageClass             StorageClass
+  HiLink glslLayout                   StorageClass
+  HiLink glslStorageClassDeprec       WarningMsg
+  HiLink glslStructure                Structure
+  HiLink glslSwizzle                  SpecialChar
+  HiLink glslTodo                     Todo
+  HiLink glslType                     Type
+  HiLink glslUniform                  glslType
+  HiLink glslUniformDeprec            WarningMsg
+  HiLink glslUnsupported              glslError
+  HiLink glslUserLabel                Label
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "glsl330"
diff --git a/syntax/glsl400.vim b/syntax/glsl400.vim
new file mode 100644 (file)
index 0000000..c1bf750
--- /dev/null
@@ -0,0 +1,319 @@
+" Vim syntax file the OpenGL Shading Language
+" Language:     GLSL 400
+" Author:       Kamil Patelczyk <patelczyk@gmail.com>
+" Date:         July 17, 2010
+" File Types:   .glsl
+" Version:      1
+" Notes:        Adapted from c.vim - Bram Moolenaar <bram.vim.org>
+"               Adapted from cg.vim - Kevin Bjorke <kbjorke@nvidia.com>
+"               Adapted from glsl.vim - Nathan Cournia <nathan@cournia.com>
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" glslCommentGroup allows adding matches for special things in comments
+syn cluster         glslCommentGroup    contains=glslTodo
+
+"catch errors caused by wrong parenthesis and brackets
+syn cluster         glslParenGroup      contains=glslParenError,glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslCommentSkip,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslLayoutQual
+if exists("c_no_bracket_error")
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslParen,glslString
+  syn match         glslParenError      display ")"
+  syn match         glslErrInParen      display contained "[{}]"
+else
+  syn region        glslParen           transparent start='(' end=')' contains=ALLBUT,@glslParenGroup,glslCppParen,glslErrInBracket,glslCppBracket,glslCppString
+  " glslCppParen: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppParen        transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInBracket,glslParen,glslBracket,glslString
+  syn match         glslParenError      display "[\])]"
+  syn match         glslErrInParen      display contained "[\]{}]"
+  syn region        glslBracket         transparent start='\[' end=']' contains=ALLBUT,@glslParenGroup,glslErrInParen,glslCppParen,glslCppBracket,glslCppString
+  " glslCppBracket: same as glslParen but ends at end-of-line; used in glslDefine
+  syn region        glslCppBracket      transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@glslParenGroup,glslErrInParen,glslParen,glslBracket,glslString
+  syn match         glslErrInBracket    display contained "[);{}]"
+endif
+
+"integer number, or floating point number without a dot and with "f".
+syn case ignore
+syn match           glslNumbers         display transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctalError,glslOctal
+" Same, but without octal error (for comments)
+syn match           glslNumbersCom      display contained transparent "\<\d\|\.\d" contains=glslNumber,glslFloat,glslOctal
+syn match           glslNumber          display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match           glslNumber          display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match           glslOctal           display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=glslOctalZero
+syn match           glslOctalZero       display contained "\<0"
+syn match           glslFloat           display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match           glslFloat           display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match           glslFloat           display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match           glslFloat           display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+" flag an octal number with wrong digits
+syn match           glslOctalError      display contained "0\o*[89]\d*"
+syn case match
+
+if exists("c_comment_strings")
+  " A comment can contain glslString, glslCharacter and glslNumber.
+  " But a "*/" inside a glslString in a glslComment DOES end the comment!  So we
+  " need to use a special type of glslString: glslCommentString, which also ends on
+  " "*/", and sees a "*" at the start of the line as glslomment again.
+  " Unfortunately this doesn't very well work for // type of comments :-(
+  syntax match      glslCommentSkip         contained "^\s*\*\($\|\s\+\)"
+  syntax region     glslCommentString       contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=glslSpecial,glslCommentSkip
+  syntax region     glslComment2String      contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=glslSpecial
+  syntax region     glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslComment2String,glslCharacter,glslNumbersCom,glslSpaceError
+  syntax region     glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslCommentString,glslCharacter,glslNumbersCom,glslSpaceError
+else                                        
+  syn region        glslCommentL            start="//" skip="\\$" end="$" keepend contains=@glslCommentGroup,glslSpaceError
+  syn region        glslComment             matchgroup=glslCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@glslCommentGroup,glslCommentStartError,glslSpaceError
+endif
+" keep a // comment separately, it terminates a preproc. conditional
+syntax match        glslCommentError        display "\*/"
+syntax match        glslCommentStartError   display "/\*"me=e-1 contained
+
+syn region          glslPreCondit           start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=glslComment,glslCppString,glslCharacter,glslCppParen,glslParenError,glslNumbers,glslCommentError,glslSpaceError
+syn match           glslPreCondit           display "^\s*#\s*\(else\|endif\)\>"
+syn region          glslCppOut              start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=glslCppOut2
+syn region          glslCppOut2             contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=glslSpaceError,glslCppSkip
+syn region          glslCppSkip             contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=glslSpaceError,glslCppSkip
+"syn match glslLineSkip        "\\$"
+syn cluster         glslPreProglslGroup     contains=glslPreCondit,glslIncluded,glslInclude,glslDefine,glslErrInParen,glslErrInBracket,glslUserLabel,glslSpecial,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslString,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslParen,glslBracket,glslMulti
+syn region          glslDefine              start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@glslPreProglslGroup
+syn region          glslPreProc             start="^\s*#\s*\(pragma\>\|line\>\|error\>\|version\>\|extension\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@glslPreProglslGroup
+
+" Highlight User Labels
+syn cluster         glslMultiGroup          contains=glslIncluded,glslSpecial,glslCommentSkip,glslCommentString,glslComment2String,@glslCommentGroup,glslCommentStartError,glslUserCont,glslUserLabel,glslBitField,glslOctalZero,glslCppOut,glslCppOut2,glslCppSkip,glslFormat,glslNumber,glslFloat,glslOctal,glslOctalError,glslNumbersCom,glslCppParen,glslCppBracket,glslCppString
+syn region          glslMulti               transparent start='?' skip='::' end=':' contains=ALLBUT,@glslMultiGroup
+" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+syn cluster         glslLabelGroup          contains=glslUserLabel
+syn match           glslUserCont            display "^\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match           glslUserCont            display ";\s*\I\i*\s*:$" contains=@glslLabelGroup
+syn match           glslUserCont            display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+syn match           glslUserCont            display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@glslLabelGroup
+
+syn match           glslUserLabel           display "\I\i*" contained
+
+" Avoid recognizing most bitfields as labels
+syn match           glslBitField            display "^\s*\I\i*\s*:\s*[1-9]"me=e-1
+syn match           glslBitField            display ";\s*\I\i*\s*:\s*[1-9]"me=e-1
+
+
+" Keywords and simple stuff 
+syn keyword         glslTodo                contained TODO FIXME XXX
+
+syn keyword         glslStorageClass        const uniform
+syn keyword         glslStorageClass        in out inout
+syn keyword         glslStorageClass        patch sample
+syn keyword         glslStorageClass        centroid flat smooth noperspective
+syn keyword         glslStorageClass        lowp mediump highp precision
+syn keyword         glslStorageClass        invariant
+syn keyword         glslStorageClass        subroutine
+
+syn match           glslLayout              /\<layout\s*(\_.\{-})/hs=s,he=s+6 contains=glslLayoutQual,glslNumber
+                                            
+syn keyword         glslStorageClassDeprec  attribute varying
+
+syn keyword         glslLayoutQual          contained shared packed std140 row_major column_major ccw cw equal_spacing fractional_even_spacing
+syn keyword         glslLayoutQual          contained fractional_odd_spacing index invocations isolines line_strip lines lines_adjacency location
+syn keyword         glslLayoutQual          contained max_vertices origin_upper_left pixel_center_integer point_mode points quads
+syn keyword         glslLayoutQual          contained stream triangle_strip triangles triangles_adjacency vertices
+
+syn keyword         glslStatement           break continue discard return
+syn keyword         glslRepeat              while for do
+syn keyword         glslConditional         if else switch
+syn keyword         glslLabel               case default
+                                            
+syn keyword         glslConstant            true false
+syn keyword         glslConstant            __LINE__ __FILE__ __VERSION__
+                                            
+syn keyword         glslType                uint uvec2 uvec3 uvec4
+syn keyword         glslType                float double int void bool
+syn keyword         glslType                mat2 mat3 mat4 dmat2 dmat3 dmat4
+syn keyword         glslType                mat2x2 mat2x3 mat2x4 dmat2x2 dmat2x3 dmat2x4
+syn keyword         glslType                mat3x2 mat3x3 mat3x4 dmat3x2 dmat3x3 dmat3x4
+syn keyword         glslType                mat4x2 mat4x3 mat4x4 dmat4x2 dmat4x3 dmat4x4
+syn keyword         glslType                vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 dvec2 dvec3 dvec4
+syn keyword         glslType                sampler1D sampler2D sampler3D samplerCube 
+syn keyword         glslType                sampler1DShadow sampler2DShadow samplerCubeShadow
+syn keyword         glslType                sampler1DArray sampler2DArray
+syn keyword         glslType                sampler1DArrayShadow sampler2DArrayShadow
+syn keyword         glslType                isampler1D isampler2D isampler3D isamplerCube
+syn keyword         glslType                isampler1DArray isampler2DArray
+syn keyword         glslType                usampler1D usampler2D usampler3D usamplerCube
+syn keyword         glslType                usampler1DArray usampler2DArray
+syn keyword         glslType                sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
+syn keyword         glslType                samplerBuffer isamplerBuffer usamplerBuffer
+syn keyword         glslType                sampler2DMS isampler2DMS usampler2DMS
+syn keyword         glslType                sampler2DMSArray isampler2DMSArray usampler2DMSArray
+syn keyword         glslType                samplerCubeArray samplerCubeArrayShadow isamplerCubeArray usamplerCubeArray
+                                            
+syn keyword         glslStructure           struct
+                                            
+" Swizzling                                  
+syn match           glslSwizzle             /\.[xyzw]\{1,4\}\>/
+syn match           glslSwizzle             /\.[rgba]\{1,4\}\>/
+syn match           glslSwizzle             /\.[stpq]\{1,4\}\>/
+                                            
+" Builtin variables
+syn keyword         glslState               gl_FragCoord gl_FrontFacing gl_PointCoord gl_SampleID gl_SamplePosition gl_FragDepth
+syn keyword         glslState               gl_VertexID gl_InstanceID gl_Position gl_PointSize
+syn keyword         glslState               gl_PrimitiveIDIn gl_InvocationID gl_PrimitiveID gl_Layer
+syn keyword         glslState               gl_ClipDistance gl_in gl_SampleMask
+
+syn keyword         glslStateDeprec         gl_FragColor gl_FragData gl_TexCoord
+syn keyword         glslStateDeprec         gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FogFragCoord
+syn keyword         glslStateDeprec         gl_Color gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2
+syn keyword         glslStateDeprec         gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord
+
+" Uniforms variables
+syn keyword         glslUniform             gl_DepthRange
+
+syn keyword         glslUniformDeprec       gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_NormalMatrix gl_NormalScale
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixTranspose gl_ProjectionMatrixTranspose gl_ModelViewProjectionMatrixTranspose
+syn keyword         glslUniformDeprec       gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose 
+syn keyword         glslUniformDeprec       gl_Point gl_FrontMaterial gl_BackMaterial gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_Fog
+syn keyword         glslUniformDeprec       gl_BackLightProduct gl_ClipPlane gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT
+syn keyword         glslUniformDeprec       gl_FrontLightProduct gl_LightSource gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS
+syn keyword         glslUniformDeprec       gl_ObjectPlaneT gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixInverse
+syn keyword         glslUniformDeprec       gl_TextureMatrixTranspose gl_TextureMatrix
+
+" Builtin constants
+syn keyword         glslConstant            gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVertexOutputComponents gl_MaxGeometryInputComponents
+syn keyword         glslConstant            gl_MaxGeometryOutputComponents gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
+syn keyword         glslConstant            gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxDrawBuffers
+syn keyword         glslConstant            gl_MaxClipDistances gl_MaxGeometryTextureImageUnits gl_MaxGeometryOutputVertices gl_MaxGeometryTotalOutputComponents
+syn keyword         glslConstant            gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents
+syn keyword         glslConstant            gl_MaxTessControlTextureImageUnits gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents
+syn keyword         glslConstant            gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits
+syn keyword         glslConstant            gl_MaxTessEvaluationUniformComponents gl_MaxTessPatchComponents gl_MaxPatchVertices gl_MaxTessGenLevel
+
+syn keyword         glslConstantDeprec      gl_MaxVaryingFloats gl_MaxVaryingComponents
+syn keyword         glslConstantDeprec      gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes
+
+" Built in functions                         
+syn keyword         glslFunc                abs acos acosh asin asinh atan atanh ceil cos cosh degrees exp exp2 floor fract inversesqrt log
+syn keyword         glslFunc                log2 max min mod modf pow radians round roundEven sign sin sinh sqrt tan tanh trunc
+syn keyword         glslFunc                clamp cross distance dot floatBitsToInt floatBitsToUint fma frexp intBitsToFloat isinf isnan
+syn keyword         glslFunc                ldexp length mix normalize packDouble2x32 packSnorm4x8 packUnorm2x16 packUnorm4x8 smoothstep step
+syn keyword         glslFunc                uintBitsToFloat unpackDouble2x32 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8
+syn keyword         glslFunc                all any bitCount bitfieldExtract bitfieldInsert bitfieldReverse determinant equal faceforward
+syn keyword         glslFunc                findLSB findMSB greaterThan greaterThanEqual imulExtended inverse lessThan lessThanEqual matrixCompMult 
+syn keyword         glslFunc                not notEqual outerProduct reflect refract transpose uaddCarry umulExtended usubBorrow 
+syn keyword         glslFunc                textureSize textureQueryLod texture textureProj textureLod textureOffset texelFetch texelFetchOffset
+syn keyword         glslFunc                textureProjOffset textureLodOffset textureProjLod textureProjLodOffset textureGrad textureGradOffset
+syn keyword         glslFunc                textureProjGrad textureProjGradOffset textureGather textureGatherOffset textureGatherOffsets
+syn keyword         glslFunc                dFdx dFdy fwidth interpolateAtCentroid interpolateAtOffset interpolateAtSample 
+syn keyword         glslFunc                noise1 noise2 noise3 noise4
+syn keyword         glslFunc                EmitStreamVertex EndStreamPrimitive EmitVertex EndPrimitive barrier
+
+syn keyword         glslFuncDeprec          ftransform
+syn keyword         glslFuncDeprec          texture1D texture1DProj texture1DProj texture1DLod texture1DProjLod texture1DProjLod texture2D 
+syn keyword         glslFuncDeprec          texture2DProj texture2DProj texture2DLod texture2DProjLod texture2DProjLod texture3D texture3DProj 
+syn keyword         glslFuncDeprec          texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj 
+syn keyword         glslFuncDeprec          shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod
+
+
+" Highlight unsupported keywords             
+syn keyword         glslUnsupported         asm
+syn keyword         glslUnsupported         class union enum typedef template this packed 
+syn keyword         glslUnsupported         common partition active
+syn keyword         glslUnsupported         filter 
+syn keyword         glslUnsupported         goto 
+syn keyword         glslUnsupported         hvec2 hvec3 hvec4 fvec2 fvec3 fvec4
+syn keyword         glslUnsupported         iimage1D iimage2D iimage3D iimageCube 
+syn keyword         glslUnsupported         iimage1DArray iimage2DArray uimage1DArray uimage2DArray
+syn keyword         glslUnsupported         image1D image2D image3D imageCube 
+syn keyword         glslUnsupported         image1DArray image2DArray 
+syn keyword         glslUnsupported         image1DArrayShadow image2DArrayShadow
+syn keyword         glslUnsupported         image1DShadow image2DShadow
+syn keyword         glslUnsupported         imageBuffer iimageBuffer uimageBuffer
+syn keyword         glslUnsupported         inline noinline volatile public static extern external interface
+syn keyword         glslUnsupported         input output
+syn keyword         glslUnsupported         long short half fixed unsigned superp
+syn keyword         glslUnsupported         namespace using
+syn keyword         glslUnsupported         sampler3DRect 
+syn keyword         glslUnsupported         sizeof cast
+syn keyword         glslUnsupported         uimage1D uimage2D uimage3D uimageCube 
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_glsl_syn_inits")
+  if version < 508
+    let did_glsl_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink glslCharacter                Character
+  HiLink glslComment                  Comment
+  HiLink glslComment2String           glslString
+  HiLink glslCommentError             glslError
+  HiLink glslCommentL                 glslComment
+  HiLink glslCommentSkip              glslComment
+  HiLink glslCommentStart             glslComment
+  HiLink glslCommentStartError        glslError
+  HiLink glslCommentString            glslString
+  HiLink glslCppOut                   Comment
+  HiLink glslCppOut2                  glslCppOut
+  HiLink glslCppSkip                  glslCppOut
+  HiLink glslCppString                glslString
+  HiLink glslDefine                   Macro
+  HiLink glslErrInBracket             glslError
+  HiLink glslErrInParen               glslError
+  HiLink glslError                    Error
+  HiLink glslFloat                    Float
+  HiLink glslFormat                   glslSpecial
+  HiLink glslInclude                  Include
+  HiLink glslIncluded                 glslString
+  HiLink glslNumber                   Number
+  HiLink glslOctal                    Number
+  HiLink glslOctalError               glslError
+  HiLink glslOctalZero                PreProc
+  HiLink glslOperator                 Operator
+  HiLink glslParenError               glslError
+  HiLink glslPreCondit                PreCondit
+  HiLink glslPreProc                  PreProc
+  HiLink glslSpaceError               glslError
+  HiLink glslSpecial                  SpecialChar
+  HiLink glslSpecialCharacter         glslSpecial
+  HiLink glslSpecialError             glslError
+  HiLink glslString                   String
+
+  HiLink glslConditional              Conditional
+  HiLink glslConstant                 Constant
+  HiLink glslFunc                     glslStatement
+  HiLink glslFuncDeprec               WarningMsg
+  HiLink glslLabel                    Label
+  HiLink glslLayoutQual               glslFunc
+  HiLink glslRepeat                   Repeat
+  HiLink glslState                    glslType
+  HiLink glslStateDeprec              WarningMsg
+  HiLink glslStatement                Statement
+  HiLink glslStorageClass             StorageClass
+  HiLink glslLayout                   StorageClass
+  HiLink glslStorageClassDeprec       WarningMsg
+  HiLink glslStructure                Structure
+  HiLink glslSwizzle                  SpecialChar
+  HiLink glslTodo                     Todo
+  HiLink glslType                     Type
+  HiLink glslUniform                  glslType
+  HiLink glslUniformDeprec            WarningMsg
+  HiLink glslUnsupported              glslError
+  HiLink glslUserLabel                Label
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "glsl400"
diff --git a/vimrc b/vimrc
index c7772dc4985134b0bf1a685081615dca705a5136..025928c2b07e8310af9fd2e0481e14d9c42a6730 100644 (file)
--- a/vimrc
+++ b/vimrc
@@ -17,6 +17,8 @@ au BufNewFile,BufRead Makefile.inc set filetype=automake
 
 au BufReadPre .skk-uim-jisyo set fileencodings=euc-jp
 
+au BufNewFile,BufRead *.frag,*.vert,*.fp,*.vp,*.glsl set filetype=glsl
+
 if $TERM == "rxvt-unicode"
        set t_Co=256
 endif