Skip to content

Commit f3e58c9

Browse files
author
jneen
committed
rewrite the GLSL lexer as not a subclass of C
1 parent b8ac249 commit f3e58c9

File tree

4 files changed

+237
-148
lines changed

4 files changed

+237
-148
lines changed

lib/rouge/lexers/glsl.rb

Lines changed: 41 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -5,162 +5,55 @@
55

66
module Rouge
77
module Lexers
8-
# This file defines the GLSL language lexer to the Rouge
9-
# syntax highlighter.
10-
#
11-
# Author: Sri Harsha Chilakapati
12-
class Glsl < C
8+
class GLSL < RegexLexer
139
tag 'glsl'
1410
filenames '*.glsl', '*.frag', '*.vert', '*.geom', '*.vs', '*.gs', '*.shader'
1511
mimetypes 'x-shader/x-vertex', 'x-shader/x-fragment', 'x-shader/x-geometry'
1612

1713
title "GLSL"
1814
desc "The GLSL shader language"
1915

20-
def self.keywords
21-
@keywords ||= Set.new %w(
22-
const uniform buffer shared attribute varying
23-
coherent volatile restrict readonly writeonly
24-
atomic_uint
25-
layout
26-
centroid flat smooth noperspective
27-
patch sample
28-
invariant precise
29-
break continue do for while switch case default
30-
if else
31-
subroutine
32-
in out inout
33-
true false
34-
discard return
35-
lowp mediump highp precision
36-
struct
37-
38-
row_major column_major packed std140 std43 binding offset align location
39-
early_fragment_tests
40-
)
41-
end
42-
43-
def self.keywords_type
44-
@keywords_type ||= Set.new %w(
45-
int void bool float double
46-
47-
vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4
48-
uint uvec2 uvec3 uvec4
49-
dvec2 dvec3 dvec4
50-
mat2 mat3 mat4
51-
mat2x2 mat2x3 mat2x4
52-
mat3x2 mat3x3 mat3x4
53-
mat4x2 mat4x3 mat4x4
54-
dmat2 dmat3 dmat4
55-
dmat2x2 dmat2x3 dmat2x4
56-
dmat3x2 dmat3x3 dmat3x4
57-
dmat4x2 dmat4x3 dmat4x4
58-
sampler1D sampler1DShadow sampler1DArray sampler1DArrayShadow
59-
isampler1D isampler1DArray usampler1D usampler1DArray
60-
sampler2D sampler2DShadow sampler2DArray sampler2DArrayShadow
61-
isampler2D isampler2DArray usampler2D usampler2DArray
62-
sampler2DRect sampler2DRectShadow isampler2DRect usampler2DRect
63-
sampler2DMS isampler2DMS usampler2DMS
64-
sampler2DMSArray isampler2DMSArray usampler2DMSArray
65-
sampler3D isampler3D usampler3D
66-
samplerCube samplerCubeShadow isamplerCube usamplerCube
67-
samplerCubeArray samplerCubeArrayShadow
68-
isamplerCubeArray usamplerCubeArray
69-
samplerBuffer isamplerBuffer usamplerBuffer
70-
image1D iimage1D uimage1D
71-
image1DArray iimage1DArray uimage1DArray
72-
image2D iimage2D uimage2D
73-
image2DArray iimage2DArray uimage2DArray
74-
image2DRect iimage2DRect uimage2DRect
75-
image2DMS iimage2DMS uimage2DMS
76-
image2DMSArray iimage2DMSArray uimage2DMSArray
77-
image3D iimage3D uimage3D
78-
imageCube iimageCube uimageCube
79-
imageCubeArray iimageCubeArray uimageCubeArray
80-
imageBuffer iimageBuffer uimageBuffer
81-
atomic_uint
82-
83-
texture1D texture1DArray
84-
itexture1D itexture1DArray utexture1D utexture1DArray
85-
texture2D texture2DArray
86-
itexture2D itexture2DArray utexture2D utexture2DArray
87-
texture2DRect itexture2DRect utexture2DRect
88-
texture2DMS itexture2DMS utexture2DMS
89-
texture2DMSArray itexture2DMSArray utexture2DMSArray
90-
texture3D itexture3D utexture3D
91-
textureCube itextureCube utextureCube
92-
textureCubeArray itextureCubeArray utextureCubeArray
93-
textureBuffer itextureBuffer utextureBuffer
94-
sampler samplerShadow
95-
subpassInput isubpassInput usubpassInput
96-
subpassInputMS isubpassInputMS usubpassInputMS
97-
)
98-
end
99-
100-
def self.reserved
101-
@reserved ||= Set.new %w(
102-
common partition active
103-
asm
104-
class union enum typedef template this
105-
resource
106-
goto
107-
inline noinline public static extern external interface
108-
long short half fixed unsigned superp
109-
input output
110-
hvec2 hvec3 hvec4 fvec2 fvec3 fvec4
111-
filter
112-
sizeof cast
113-
namespace using
114-
sampler3DRect
115-
)
116-
end
117-
118-
def self.builtins
119-
@builtins ||= Set.new %w(
120-
gl_VertexID gl_VertexIndex gl_InstanceID gl_InstanceIndex gl_PerVertex gl_Position gl_PointSize gl_ClipDistance gl_CullDistance
121-
gl_PrimitiveIDIn gl_InvocationID gl_PrimitiveID gl_Layer gl_ViewportIndex
122-
gl_MaxPatchVertices gl_PatchVerticesIn gl_TessLevelOuter gl_TessLevelInner
123-
gl_TessCoord gl_FragCoord gl_FrontFacing gl_PointCoord gl_SampleID gl_SamplePosition
124-
gl_FragColor gl_FragData gl_MaxDrawBuffers gl_FragDepth gl_SampleMask
125-
gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor
126-
gl_TexCoord gl_FogFragCoord gl_Color gl_SecondaryColor gl_Normal
127-
gl_MultiTexCord0 gl_MultiTexCord1 gl_MultiTexCord2 gl_MultiTexCord3
128-
gl_MultiTexCord4 gl_MultiTexCord5 gl_MultiTexCord6 gl_MultiTexCord7
129-
gl_FogCoord gl_MaxVertexAttribs gl_MaxVertexUniformComponents
130-
gl_MaxVaryingFloats gl_MaxVaryingComponents gl_MaxVertexOutputComponents
131-
gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents
132-
gl_MaxFragmentInputComponents gl_MaxVertexTextureImageUnits
133-
gl_MaxCombinedTextureImageUnits gl_MaxTextureImageUnits
134-
gl_MaxFragmentUniformComponents gl_MaxClipDistances
135-
gl_MaxGeometryTextureImageUnits gl_MaxGeometryUniformComponents
136-
gl_MaxGeometryVaryingComponents gl_MaxTessControlInputComponents
137-
gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits
138-
gl_MaxTessControlUniformComponents gl_MaxTessControlTotalOutputComponents
139-
gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents
140-
gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents
141-
gl_MaxTessPatchComponents gl_MaxTessGenLevel gl_MaxViewports
142-
gl_MaxVertexUniformVectors gl_MaxFragmentUniformVectors gl_MaxVaryingVectors
143-
gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxClipPlanes gl_DepthRange
144-
gl_DepthRangeParameters gl_ModelViewMatrix gl_ProjectionMatrix
145-
gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix
146-
gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
147-
gl_TextureMatrixInverse gl_ModelViewMatrixTranspose
148-
gl_ModelViewProjectionMatrixTranspose gl_TextureMatrixTranspose
149-
gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose
150-
gl_ModelViewProjectionMatrixInverseTranspose
151-
gl_TextureMatrixInverseTranspose gl_NormalScale gl_ClipPlane gl_PointParameters
152-
gl_Point gl_MaterialParameters gl_FrontMaterial gl_BackMaterial
153-
gl_LightSourceParameters gl_LightSource gl_MaxLights gl_LightModelParameters
154-
gl_LightModel gl_LightModelProducts gl_FrontLightModelProduct
155-
gl_BackLightModelProduct gl_LightProducts gl_FrontLightProduct
156-
gl_BackLightProduct gl_TextureEnvColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR
157-
gl_EyePlaneQ gl_ObjectPlaneS gl_ObjectPlaneT gl_ObjectPlaneR gl_ObjectPlaneQ
158-
gl_FogParameters gl_Fog
159-
gl_DrawID gl_BaseVertex gl_BaseInstance
160-
gl_NumWorkGroups gl_WorkGroupID gl_LocalInvocationID gl_GlobalInvocationID gl_LocalInvocationIndex
161-
gl_WorkGroupSize gl_HelperInvocation
162-
)
16+
lazy { require_relative "glsl/builtins" }
17+
18+
state :root do
19+
rule %r/\s+/, Text
20+
rule %r(/[*].*?[*]/)m, Comment::Multiline
21+
rule %r(//.*$), Comment
22+
23+
rule %r([-.+/*%<>\[\](){}^|&~=!:;,?]), Punctuation
24+
rule %r/^#(?:[^\n]|\\\r?\n)*/, Comment::Preproc
25+
rule %r/defined\b/, Comment::Preproc
26+
rule %r/__(?:LINE|FILE|VERSION)__\b/, Keyword::Constant
27+
rule %r/(?:true|false)\b/, Keyword::Pseudo
28+
29+
rule %r/(?:\d+[.]\d*|[.]\d+)(?:e[+-]?\d+)?(?:l?f)?/i, Num::Float
30+
rule %r/\d+(?:e[+-]?\d+)?(?:l?f)?/i, Num::Float
31+
32+
rule %r/\w+/ do |m|
33+
if KEYWORDS.include?(m[0])
34+
token Keyword
35+
elsif TYPES.include?(m[0])
36+
token Keyword::Type
37+
else
38+
fallthrough!
39+
end
40+
end
41+
42+
rule %r/\w+(?=\s*[(])/, Name::Function
43+
44+
rule %r/\w+/ do |m|
45+
if GL_VARS.include?(m[0])
46+
token Name::Constant
47+
elsif BUILTINS.include?(m[0])
48+
token Name::Builtin
49+
else
50+
token Name
51+
end
52+
end
16353
end
16454
end
55+
56+
# backcompat
57+
Glsl = GLSL
16558
end
16659
end

lib/rouge/lexers/glsl/builtins.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# -*- coding: utf-8 -*- #
2+
# frozen_string_literal: true
3+
4+
# DO NOT EDIT
5+
# This file is automatically generated by `rake builtins:glsl`.
6+
# See tasks/builtins/glsl.rake for more info.
7+
8+
module Rouge
9+
module Lexers
10+
class GLSL
11+
BUILTINS = Set["EmitStreamVertex", "EmitVertex", "EndPrimitive", "EndStreamPrimitive", "abs", "acos", "acosh", "all", "allInvocations", "allInvocationsEqual", "any", "anyInvocation", "asin", "asinh", "atan", "atanh", "atomicAdd", "atomicAnd", "atomicCompSwap", "atomicCounter", "atomicCounterAdd", "atomicCounterAnd", "atomicCounterCompSwap", "atomicCounterDecrement", "atomicCounterExchange", "atomicCounterIncrement", "atomicCounterMax", "atomicCounterMin", "atomicCounterOr", "atomicCounterSubtract", "atomicCounterXor", "atomicExchange", "atomicMax", "atomicMin", "atomicOr", "atomicXor", "barrier", "bitCount", "bitfieldExtract", "bitfieldInsert", "bitfieldReverse", "ceil", "clamp", "cos", "cosh", "cross", "dFdx", "dFdxCoarse", "dFdxFine", "dFdy", "dFdyCoarse", "dFdyFine", "degrees", "determinant", "distance", "dot", "equal", "exp", "exp2", "faceforward", "findLSB", "findMSB", "floatBitsToInt", "floatBitsToUint", "floor", "fma", "fract", "frexp", "ftransform", "fwidth", "fwidthCoarse", "fwidthFine", "greaterThan", "greaterThanEqual", "groupMemoryBarrier", "imageAtomicAdd", "imageAtomicAnd", "imageAtomicCompSwap", "imageAtomicExchange", "imageAtomicMax", "imageAtomicMin", "imageAtomicOr", "imageAtomicXor", "imageLoad", "imageSamples", "imageSize", "imageStore", "imulExtended", "intBitsToFloat", "interpolateAtCentroid", "interpolateAtOffset", "interpolateAtSample", "inverse", "inversesqrt", "isinf", "isnan", "ldexp", "length", "lessThan", "lessThanEqual", "log", "log2", "matrixCompMult", "max", "memoryBarrier", "memoryBarrierAtomicCounter", "memoryBarrierBuffer", "memoryBarrierImage", "memoryBarrierShared", "min", "mix", "mod", "modf", "neighbor", "noise1", "noise2", "noise3", "noise4", "normalize", "not", "notEqual", "outerProduct", "packDouble2x32", "packHalf2x16", "packSnorm2x16", "packSnorm4x8", "packUnorm2x16", "packUnorm4x8", "pow", "radians", "reflect", "refract", "round", "roundEven", "shadow1D", "shadow1DLod", "shadow1DProj", "shadow1DProjLod", "shadow2D", "shadow2DLod", "shadow2DProj", "shadow2DProjLod", "sign", "sin", "sinh", "smoothstep", "sqrt", "step", "subpassLoad", "tan", "tanh", "texelFetch", "texelFetchOffset", "texture", "texture1DLod", "texture1DProj", "texture1DProjLod", "texture2DLod", "texture2DProj", "texture2DProjLod", "texture3DLod", "texture3DProj", "texture3DProjLod", "textureCubeLod", "textureGather", "textureGatherOffset", "textureGatherOffsets", "textureGrad", "textureGradOffset", "textureLod", "textureLodOffset", "textureOffset", "textureProj", "textureProjGrad", "textureProjGradOffset", "textureProjLod", "textureProjLodOffset", "textureProjOffset", "textureQueryLevels", "textureQueryLod", "textureSamples", "textureSize", "transpose", "trunc", "uaddCarry", "uintBitsToFloat", "umulExtended", "unpackDouble2x32", "unpackHalf2x16", "unpackSnorm2x16", "unpackSnorm4x8", "unpackUnorm2x16", "unpackUnorm4x8", "usubBorrow"]
12+
KEYWORDS = Set["active", "asm", "attribute", "break", "buffer", "case", "cast", "centroid", "class", "coherent", "common", "const", "continue", "default", "discard", "do", "else", "enum", "extern", "external", "false", "filter", "fixed", "flat", "for", "fvec2", "fvec3", "fvec4", "goto", "half", "highp", "hvec2", "hvec3", "hvec4", "if", "in", "inline", "inout", "input", "interface", "invariant", "layout", "long", "lowp", "mediump", "namespace", "noinline", "noperspective", "out", "output", "partition", "patch", "precise", "precision", "public", "readonly", "resource", "restrict", "return", "sample", "sampler3DRect", "shared", "short", "sizeof", "smooth", "static", "struct", "subroutine", "superp", "switch", "template", "this", "true", "typedef", "uniform", "union", "unsigned", "using", "varying", "volatile", "while", "writeonly"]
13+
TYPES = Set["atomic_uint", "bool", "bvec2", "bvec3", "bvec4", "dmat2", "dmat2x2", "dmat2x3", "dmat2x4", "dmat3", "dmat3x2", "dmat3x3", "dmat3x4", "dmat4", "dmat4x2", "dmat4x3", "dmat4x4", "double", "dvec2", "dvec3", "dvec4", "float", "iimage1D", "iimage1DArray", "iimage2D", "iimage2DArray", "iimage2DMS", "iimage2DMSArray", "iimage2DRect", "iimage3D", "iimageBuffer", "iimageCube", "iimageCubeArray", "image1D", "image1DArray", "image2D", "image2DArray", "image2DMS", "image2DMSArray", "image2DRect", "image3D", "imageBuffer", "imageCube", "imageCubeArray", "int", "isampler1D", "isampler1DArray", "isampler2D", "isampler2DArray", "isampler2DMS", "isampler2DMSArray", "isampler2DRect", "isampler3D", "isamplerBuffer", "isamplerCube", "isamplerCubeArray", "isubpassInput", "isubpassInputMS", "itexture1D", "itexture1DArray", "itexture2D", "itexture2DArray", "itexture2DMS", "itexture2DMSArray", "itexture2DRect", "itexture3D", "itextureBuffer", "itextureCube", "itextureCubeArray", "ivec2", "ivec3", "ivec4", "mat2", "mat2x2", "mat2x3", "mat2x4", "mat3", "mat3x2", "mat3x3", "mat3x4", "mat4", "mat4x2", "mat4x3", "mat4x4", "sampler", "sampler1D", "sampler1DArray", "sampler1DArrayShadow", "sampler1DShadow", "sampler2D", "sampler2DArray", "sampler2DArrayShadow", "sampler2DMS", "sampler2DMSArray", "sampler2DRect", "sampler2DRectShadow", "sampler2DShadow", "sampler3D", "samplerBuffer", "samplerCube", "samplerCubeArray", "samplerCubeArrayShadow", "samplerCubeShadow", "samplerShadow", "subpassInput", "subpassInputMS", "texture1D", "texture1DArray", "texture2D", "texture2DArray", "texture2DMS", "texture2DMSArray", "texture2DRect", "texture3D", "textureBuffer", "textureCube", "textureCubeArray", "uimage1D", "uimage1DArray", "uimage2D", "uimage2DArray", "uimage2DMS", "uimage2DMSArray", "uimage2DRect", "uimage3D", "uimageBuffer", "uimageCube", "uimageCubeArray", "uint", "usampler1D", "usampler1DArray", "usampler2D", "usampler2DArray", "usampler2DMS", "usampler2DMSArray", "usampler2DRect", "usampler3D", "usamplerBuffer", "usamplerCube", "usamplerCubeArray", "usubpassInput", "usubpassInputMS", "utexture1D", "utexture1DArray", "utexture2D", "utexture2DArray", "utexture2DMS", "utexture2DMSArray", "utexture2DRect", "utexture3D", "utextureBuffer", "utextureCube", "utextureCubeArray", "uvec2", "uvec3", "uvec4", "vec2", "vec3", "vec4", "void"]
14+
GL_VARS = Set["gl_BackColor", "gl_BackLightModelProduct", "gl_BackLightProduct", "gl_BackMaterial", "gl_BackSecondaryColor", "gl_BaseInstance", "gl_BaseVertex", "gl_BoundingBox", "gl_ClipDistance", "gl_ClipPlane", "gl_ClipVertex", "gl_Color", "gl_CullDistance", "gl_DepthRange", "gl_DepthRangeParameters", "gl_DrawID", "gl_EyePlaneQ", "gl_EyePlaneR", "gl_EyePlaneS", "gl_EyePlaneT", "gl_Fog", "gl_FogCoord", "gl_FogFragCoord", "gl_FogParameters", "gl_FragColor", "gl_FragCoord", "gl_FragData", "gl_FragDepth", "gl_FrontColor", "gl_FrontFacing", "gl_FrontLightModelProduct", "gl_FrontLightProduct", "gl_FrontMaterial", "gl_FrontSecondaryColor", "gl_GlobalInvocationID", "gl_HelperInvocation", "gl_InstanceID", "gl_InstanceIndex", "gl_InvocationID", "gl_Layer", "gl_LightModel", "gl_LightModelParameters", "gl_LightModelProducts", "gl_LightProducts", "gl_LightSource", "gl_LightSourceParameters", "gl_LocalInvocationID", "gl_LocalInvocationIndex", "gl_MaterialParameters", "gl_MaxAtomicCounterBindings", "gl_MaxAtomicCounterBufferSize", "gl_MaxClipDistances", "gl_MaxClipPlanes", "gl_MaxCombinedAtomicCounterBuffers", "gl_MaxCombinedAtomicCounters", "gl_MaxCombinedClipAndCullDistances", "gl_MaxCombinedImageUniforms", "gl_MaxCombinedImageUnitsAndFragmentOutputs", "gl_MaxCombinedShaderOutputResources", "gl_MaxCombinedTextureImageUnits", "gl_MaxComputeAtomicCounterBuffers", "gl_MaxComputeAtomicCounters", "gl_MaxComputeImageUniforms", "gl_MaxComputeTextureImageUnits", "gl_MaxComputeUniformComponents", "gl_MaxComputeWorkGroupCount", "gl_MaxComputeWorkGroupSize", "gl_MaxCullDistances", "gl_MaxDrawBuffers", "gl_MaxFragmentAtomicCounterBuffers", "gl_MaxFragmentAtomicCounters", "gl_MaxFragmentImageUniforms", "gl_MaxFragmentInputComponents", "gl_MaxFragmentInputVectors", "gl_MaxFragmentUniformComponents", "gl_MaxFragmentUniformVectors", "gl_MaxGeometryAtomicCounterBuffers", "gl_MaxGeometryAtomicCounters", "gl_MaxGeometryImageUniforms", "gl_MaxGeometryInputComponents", "gl_MaxGeometryOutputComponents", "gl_MaxGeometryOutputVertices", "gl_MaxGeometryTextureImageUnits", "gl_MaxGeometryTotalOutputComponents", "gl_MaxGeometryUniformComponents", "gl_MaxGeometryVaryingComponents", "gl_MaxImageSamples", "gl_MaxImageUnits", "gl_MaxInputAttachments", "gl_MaxLights", "gl_MaxPatchVertices", "gl_MaxProgramTexelOffset", "gl_MaxSamples", "gl_MaxTessControlAtomicCounterBuffers", "gl_MaxTessControlAtomicCounters", "gl_MaxTessControlImageUniforms", "gl_MaxTessControlInputComponents", "gl_MaxTessControlOutputComponents", "gl_MaxTessControlTextureImageUnits", "gl_MaxTessControlTotalOutputComponents", "gl_MaxTessControlUniformComponents", "gl_MaxTessEvaluationAtomicCounterBuffers", "gl_MaxTessEvaluationAtomicCounters", "gl_MaxTessEvaluationImageUniforms", "gl_MaxTessEvaluationInputComponents", "gl_MaxTessEvaluationOutputComponents", "gl_MaxTessEvaluationTextureImageUnits", "gl_MaxTessEvaluationUniformComponents", "gl_MaxTessGenLevel", "gl_MaxTessPatchComponents", "gl_MaxTextureCoords", "gl_MaxTextureImageUnits", "gl_MaxTextureUnits", "gl_MaxTransformFeedbackBuffers", "gl_MaxTransformFeedbackInterleavedComponents", "gl_MaxVaryingComponents", "gl_MaxVaryingFloats", "gl_MaxVaryingVectors", "gl_MaxVertexAtomicCounterBuffers", "gl_MaxVertexAtomicCounters", "gl_MaxVertexAttribs", "gl_MaxVertexImageUniforms", "gl_MaxVertexOutputComponents", "gl_MaxVertexOutputVectors", "gl_MaxVertexTextureImageUnits", "gl_MaxVertexUniformComponents", "gl_MaxVertexUniformVectors", "gl_MaxViewports", "gl_MinProgramTexelOffset", "gl_ModelViewMatrix", "gl_ModelViewMatrixInverse", "gl_ModelViewMatrixInverseTranspose", "gl_ModelViewMatrixTranspose", "gl_ModelViewProjectionMatrix", "gl_ModelViewProjectionMatrixInverse", "gl_ModelViewProjectionMatrixInverseTranspose", "gl_ModelViewProjectionMatrixTranspose", "gl_MultiTexCoord0", "gl_MultiTexCoord1", "gl_MultiTexCoord2", "gl_MultiTexCoord3", "gl_MultiTexCoord4", "gl_MultiTexCoord5", "gl_MultiTexCoord6", "gl_MultiTexCoord7", "gl_Normal", "gl_NormalMatrix", "gl_NormalScale", "gl_NumSamples", "gl_NumWorkGroups", "gl_ObjectPlaneQ", "gl_ObjectPlaneR", "gl_ObjectPlaneS", "gl_ObjectPlaneT", "gl_PatchVerticesIn", "gl_PerFragment", "gl_PerVertex", "gl_Point", "gl_PointCoord", "gl_PointParameters", "gl_PointSize", "gl_Position", "gl_PrimitiveID", "gl_PrimitiveIDIn", "gl_ProjectionMatrix", "gl_ProjectionMatrixInverse", "gl_ProjectionMatrixInverseTranspose", "gl_ProjectionMatrixTranspose", "gl_SampleID", "gl_SampleMask", "gl_SampleMaskIn", "gl_SamplePosition", "gl_SecondaryColor", "gl_TessCoord", "gl_TessLevelInner", "gl_TessLevelOuter", "gl_TexCoord", "gl_TextureEnvColor", "gl_TextureMatrix", "gl_TextureMatrixInverse", "gl_TextureMatrixInverseTranspose", "gl_TextureMatrixTranspose", "gl_Vertex", "gl_VertexID", "gl_VertexIndex", "gl_ViewportIndex", "gl_WorkGroupID", "gl_WorkGroupSize", "gl_color", "gl_in", "gl_out"]
15+
end
16+
end
17+
end

0 commit comments

Comments
 (0)