// // Glsl // const TextEditor::Language& Glsl() { static bool initialized = false; static TextEditor::Language language; if (!initialized) { language = TextEditor::Language::Glsl(); // source: https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.html static const char* const identifiers[] = { "abs", "acos", "acosh", "all", "any", "asin", "asinh", "atan", "atanh", "atomicAdd", "atomicAnd", "atomicCompSwap", "atomicCounter", "atomicCounterDecrement", "atomicCounterIncrement", "atomicExchange", "atomicMax", "atomicMin", "atomicOr", "atomicXor", "barrier", "bitCount", "bitfieldExtract", "bitfieldInsert" "bitfieldReverse", "ceil", "clamp", "cos", "cosh", "cross", "degrees", "determinant", "dFdx", "dFdxCoarse", "dFdxFine", "dFdy", "dFdyCoarse", "dFdyFine", "distance", "dot", "EmitStreamVertex", "EmitVertex", "EndPrimitive", "EndStreamPrimitive", "equal", "exp", "exp2", "faceforward", "findLSB", "findMSB", "floatBitsToInt", "floatBitsToUint", "floor", "fma", "fract", "frexp", "fwidth", "fwidthCoarse", "fwidthFine", "glActiveShaderProgram", "glActiveTexture", "glAttachShader", "glBeginConditionalRender", "glBeginQuery", "glBeginQueryIndexed", "glBeginTransformFeedback", "glBindAttribLocation", "glBindBuffer", "glBindBufferBase", "glBindBufferRange", "glBindBuffersBase", "glBindBuffersRange", "glBindFragDataLocation", "glBindFragDataLocationIndexed", "glBindFramebuffer", "glBindImageTexture", "glBindImageTextures", "glBindProgramPipeline", "glBindRenderbuffer", "glBindSampler", "glBindSamplers", "glBindTexture", "glBindTextures", "glBindTextureUnit", "glBindTransformFeedback", "glBindVertexArray", "glBindVertexBuffer", "glBindVertexBuffers", "glBlendColor", "glBlendEquation", "glBlendEquationi", "glBlendEquationSeparate", "glBlendEquationSeparatei", "glBlendFunc", "glBlendFunci", "glBlendFuncSeparate", "glBlendFuncSeparatei", "glBlitFramebuffer", "glBlitNamedFramebuffer", "glBufferData", "glBufferStorage", "glBufferSubData", "glCheckFramebufferStatus", "glCheckNamedFramebufferStatus", "glClampColor", "glClear", "glClearBuffer", "glClearBufferData", "glClearBufferfi", "glClearBufferfv", "glClearBufferiv", "glClearBufferSubData", "glClearBufferuiv", "glClearColor", "glClearDepth", "glClearDepthf", "glClearNamedBufferData", "glClearNamedBufferSubData", "glClearNamedFramebufferfi", "glClearNamedFramebufferfv", "glClearNamedFramebufferiv", "glClearNamedFramebufferuiv", "glClearStencil", "glClearTexImage", "glClearTexSubImage", "glClientWaitSync", "glClipControl", "glColorMask", "glColorMaski", "glCompileShader", "glCompressedTexImage1D", "glCompressedTexImage2D", "glCompressedTexImage3D", "glCompressedTexSubImage1D", "glCompressedTexSubImage2D", "glCompressedTexSubImage3D", "glCompressedTextureSubImage1D", "glCompressedTextureSubImage2D", "glCompressedTextureSubImage3D", "glCopyBufferSubData", "glCopyImageSubData", "glCopyNamedBufferSubData", "glCopyTexImage1D", "glCopyTexImage2D", "glCopyTexSubImage1D", "glCopyTexSubImage2D", "glCopyTexSubImage3D", "glCopyTextureSubImage1D", "glCopyTextureSubImage2D", "glCopyTextureSubImage3D", "glCreateBuffers", "glCreateFramebuffers", "glCreateProgram", "glCreateProgramPipelines", "glCreateQueries", "glCreateRenderbuffers", "glCreateSamplers", "glCreateShader", "glCreateShaderProgram", "glCreateShaderProgramv", "glCreateTextures", "glCreateTransformFeedbacks", "glCreateVertexArrays", "glCullFace", "glDebugMessageCallback", "glDebugMessageControl", "glDebugMessageInsert", "glDeleteBuffers", "glDeleteFramebuffers", "glDeleteProgram", "glDeleteProgramPipelines", "glDeleteQueries", "glDeleteRenderbuffers", "glDeleteSamplers", "glDeleteShader", "glDeleteSync", "glDeleteTextures", "glDeleteTransformFeedbacks", "glDeleteVertexArrays", "glDepthFunc", "glDepthMask", "glDepthRange", "glDepthRangeArray", "glDepthRangeArrayv", "glDepthRangef", "glDepthRangeIndexed", "glDetachShader", "glDisable", "glDisablei", "glDisableVertexArrayAttrib", "glDisableVertexAttribArray", "glDispatchCompute", "glDispatchComputeIndirect", "glDrawArrays", "glDrawArraysIndirect", "glDrawArraysInstanced", "glDrawArraysInstancedBaseInstance", "glDrawBuffer", "glDrawBuffers", "glDrawElements", "glDrawElementsBaseVertex", "glDrawElementsIndirect", "glDrawElementsInstanced", "glDrawElementsInstancedBaseInstance", "glDrawElementsInstancedBaseVertex", "glDrawElementsInstancedBaseVertexBaseInstance", "glDrawRangeElements", "glDrawRangeElementsBaseVertex", "glDrawTransformFeedback", "glDrawTransformFeedbackInstanced", "glDrawTransformFeedbackStream", "glDrawTransformFeedbackStreamInstanced", "glEnable", "glEnablei", "glEnableVertexArrayAttrib", "glEnableVertexAttribArray", "glEndConditionalRender", "glEndQuery", "glEndQueryIndexed", "glEndTransformFeedback", "glFenceSync", "glFinish", "glFlush", "glFlushMappedBufferRange", "glFlushMappedNamedBufferRange", "glFramebufferParameteri", "glFramebufferParameteri", "glFramebufferRenderbuffer", "glFramebufferTexture", "glFramebufferTexture1D", "glFramebufferTexture2D", "glFramebufferTexture3D", "glFramebufferTextureLayer", "glFrontFace", "glGenBuffers", "glGenerateMipmap", "glGenerateTextureMipmap", "glGenFramebuffers", "glGenProgramPipelines", "glGenQueries", "glGenRenderbuffers", "glGenSamplers", "glGenTextures", "glGenTransformFeedbacks", "glGenVertexArrays", "glGet", "glGetActiveAtomicCounterBufferiv", "glGetActiveAttrib", "glGetActiveSubroutineName", "glGetActiveSubroutineUniform", "glGetActiveSubroutineUniformiv", "glGetActiveSubroutineUniformName", "glGetActiveUniform", "glGetActiveUniformBlock", "glGetActiveUniformBlockiv", "glGetActiveUniformBlockName", "glGetActiveUniformName", "glGetActiveUniformsiv", "glGetAttachedShaders", "glGetAttribLocation", "glGetBooleani_v", "glGetBooleanv", "glGetBufferParameter", "glGetBufferParameteri64v", "glGetBufferParameteriv", "glGetBufferPointerv", "glGetBufferSubData", "glGetCompressedTexImage", "glGetCompressedTextureImage", "glGetCompressedTextureSubImage", "glGetDebugMessageLog", "glGetDoublei_v", "glGetDoublev", "glGetError", "glGetFloati_v", "glGetFloatv", "glGetFragDataIndex", "glGetFragDataLocation", "glGetFramebufferAttachmentParameter", "glGetFramebufferAttachmentParameteriv", "glGetFramebufferParameter", "glGetFramebufferParameteriv", "glGetGraphicsResetStatus", "glGetInteger64i_v", "glGetInteger64v", "glGetIntegeri_v", "glGetIntegerv", "glGetInternalformat", "glGetInternalformati64v", "glGetInternalformativ", "glGetMultisample", "glGetMultisamplefv", "glGetNamedBufferParameteri64v", "glGetNamedBufferParameteriv", "glGetNamedBufferPointerv", "glGetNamedBufferSubData", "glGetNamedFramebufferAttachmentParameteriv", "glGetNamedFramebufferParameteriv", "glGetNamedRenderbufferParameteriv", "glGetnCompressedTexImage", "glGetnTexImage", "glGetnUniformdv", "glGetnUniformfv", "glGetnUniformiv", "glGetnUniformuiv", "glGetObjectLabel", "glGetObjectPtrLabel", "glGetPointerv", "glGetProgram", "glGetProgramBinary", "glGetProgramInfoLog", "glGetProgramInterface", "glGetProgramInterfaceiv", "glGetProgramiv", "glGetProgramPipeline", "glGetProgramPipelineInfoLog", "glGetProgramPipelineiv", "glGetProgramResource", "glGetProgramResourceIndex", "glGetProgramResourceiv", "glGetProgramResourceLocation", "glGetProgramResourceLocationIndex", "glGetProgramResourceName", "glGetProgramStage", "glGetProgramStageiv", "glGetQueryBufferObjecti64v", "glGetQueryBufferObjectiv", "glGetQueryBufferObjectui64v", "glGetQueryBufferObjectuiv", "glGetQueryIndexed", "glGetQueryIndexediv", "glGetQueryiv", "glGetQueryObject", "glGetQueryObjecti64v", "glGetQueryObjectiv", "glGetQueryObjectui64v", "glGetQueryObjectuiv", "glGetRenderbufferParameter", "glGetRenderbufferParameteriv", "glGetSamplerParameter", "glGetSamplerParameterfv", "glGetSamplerParameterIiv", "glGetSamplerParameterIuiv", "glGetSamplerParameteriv", "glGetShader", "glGetShaderInfoLog", "glGetShaderiv", "glGetShaderPrecisionFormat", "glGetShaderSource", "glGetString", "glGetStringi", "glGetSubroutineIndex", "glGetSubroutineUniformLocation", "glGetSync", "glGetSynciv", "glGetTexImage", "glGetTexLevelParameter", "glGetTexLevelParameterfv", "glGetTexLevelParameteriv", "glGetTexParameter", "glGetTexParameterfv", "glGetTexParameterIiv", "glGetTexParameterIuiv", "glGetTexParameteriv", "glGetTextureImage", "glGetTextureLevelParameterfv", "glGetTextureLevelParameteriv", "glGetTextureParameterfv", "glGetTextureParameterIiv", "glGetTextureParameterIuiv", "glGetTextureParameteriv", "glGetTextureSubImage", "glGetTransformFeedback", "glGetTransformFeedbacki64_v", "glGetTransformFeedbackiv", "glGetTransformFeedbacki_v", "glGetTransformFeedbackVarying", "glGetUniform", "glGetUniformBlockIndex", "glGetUniformdv", "glGetUniformfv", "glGetUniformIndices", "glGetUniformiv", "glGetUniformLocation", "glGetUniformSubroutine", "glGetUniformSubroutineuiv", "glGetUniformuiv", "glGetVertexArrayIndexed", "glGetVertexArrayIndexed64iv", "glGetVertexArrayIndexediv", "glGetVertexArrayiv", "glGetVertexAttrib", "glGetVertexAttribdv", "glGetVertexAttribfv", "glGetVertexAttribIiv", "glGetVertexAttribIuiv", "glGetVertexAttribiv", "glGetVertexAttribLdv", "glGetVertexAttribPointerv", "glHint", "glInvalidateBufferData", "glInvalidateBufferSubData", "glInvalidateFramebuffer", "glInvalidateNamedFramebufferData", "glInvalidateNamedFramebufferSubData", "glInvalidateSubFramebuffer", "glInvalidateTexImage", "glInvalidateTexSubImage", "glIsBuffer", "glIsEnabled", "glIsEnabledi", "glIsFramebuffer", "glIsProgram", "glIsProgramPipeline", "glIsQuery", "glIsRenderbuffer", "glIsSampler", "glIsShader", "glIsSync", "glIsTexture", "glIsTransformFeedback", "glIsVertexArray", "glLineWidth", "glLinkProgram", "glLogicOp", "glMapBuffer", "glMapBufferRange", "glMapNamedBuffer", "glMapNamedBufferRange", "glMemoryBarrier", "glMemoryBarrierByRegion", "glMinSampleShading", "glMultiDrawArrays", "glMultiDrawArraysIndirect", "glMultiDrawElements", "glMultiDrawElementsBaseVertex", "glMultiDrawElementsIndirect", "glNamedBufferData", "glNamedBufferStorage", "glNamedBufferSubData", "glNamedFramebufferDrawBuffer", "glNamedFramebufferDrawBuffers", "glNamedFramebufferParameteri", "glNamedFramebufferParameteri", "glNamedFramebufferReadBuffer", "glNamedFramebufferRenderbuffer", "glNamedFramebufferTexture", "glNamedFramebufferTextureLayer", "glNamedRenderbufferStorage", "glNamedRenderbufferStorageMultisample", "glObjectLabel", "glObjectPtrLabel", "glPatchParameter", "glPatchParameterfv", "glPatchParameteri", "glPauseTransformFeedback", "glPixelStore", "glPixelStoref", "glPixelStorei", "glPointParameter", "glPointParameterf", "glPointParameterfv", "glPointParameteri", "glPointParameteriv", "glPointSize", "glPolygonMode", "glPolygonOffset", "glPopDebugGroup", "glPrimitiveRestartIndex", "glProgramBinary", "glProgramParameter", "glProgramParameteri", "glProgramUniform", "glProgramUniform1f", "glProgramUniform1fv", "glProgramUniform1i", "glProgramUniform1iv", "glProgramUniform1ui", "glProgramUniform1uiv", "glProgramUniform2f", "glProgramUniform2fv", "glProgramUniform2i", "glProgramUniform2iv", "glProgramUniform2ui", "glProgramUniform2uiv", "glProgramUniform3f", "glProgramUniform3fv", "glProgramUniform3i", "glProgramUniform3iv", "glProgramUniform3ui", "glProgramUniform3uiv", "glProgramUniform4f", "glProgramUniform4fv", "glProgramUniform4i", "glProgramUniform4iv", "glProgramUniform4ui", "glProgramUniform4uiv", "glProgramUniformMatrix2fv", "glProgramUniformMatrix2x3fv", "glProgramUniformMatrix2x4fv", "glProgramUniformMatrix3fv", "glProgramUniformMatrix3x2fv", "glProgramUniformMatrix3x4fv", "glProgramUniformMatrix4fv", "glProgramUniformMatrix4x2fv", "glProgramUniformMatrix4x3fv", "glProvokingVertex", "glPushDebugGroup", "glQueryCounter", "glReadBuffer", "glReadnPixels", "glReadPixels", "glReleaseShaderCompiler", "glRenderbufferStorage", "glRenderbufferStorageMultisample", "glResumeTransformFeedback", "glSampleCoverage", "glSampleMaski", "glSamplerParameter", "glSamplerParameterf", "glSamplerParameterfv", "glSamplerParameteri", "glSamplerParameterIiv", "glSamplerParameterIuiv", "glSamplerParameteriv", "glScissor", "glScissorArray", "glScissorArrayv", "glScissorIndexed", "glScissorIndexedv", "glShaderBinary", "glShaderSource", "glShaderStorageBlockBinding", "glStencilFunc", "glStencilFuncSeparate", "glStencilMask", "glStencilMaskSeparate", "glStencilOp", "glStencilOpSeparate", "glTexBuffer", "glTexBufferRange", "glTexImage1D", "glTexImage2D", "glTexImage2DMultisample", "glTexImage3D", "glTexImage3DMultisample", "glTexParameter", "glTexParameterf", "glTexParameterfv", "glTexParameteri", "glTexParameterIiv", "glTexParameterIuiv", "glTexParameteriv", "glTexStorage1D", "glTexStorage2D", "glTexStorage2DMultisample", "glTexStorage3D", "glTexStorage3DMultisample", "glTexSubImage1D", "glTexSubImage2D", "glTexSubImage3D", "glTextureBarrier", "glTextureBuffer", "glTextureBufferRange", "glTextureParameterf", "glTextureParameterfv", "glTextureParameteri", "glTextureParameterIiv", "glTextureParameterIuiv", "glTextureParameteriv", "glTextureStorage1D", "glTextureStorage2D", "glTextureStorage2DMultisample", "glTextureStorage3D", "glTextureStorage3DMultisample", "glTextureSubImage1D", "glTextureSubImage2D", "glTextureSubImage3D", "glTextureView", "glTransformFeedbackBufferBase", "glTransformFeedbackBufferRange", "glTransformFeedbackVaryings", "glUniform", "glUniform1f", "glUniform1fv", "glUniform1i", "glUniform1iv", "glUniform1ui", "glUniform1uiv", "glUniform2f", "glUniform2fv", "glUniform2i", "glUniform2iv", "glUniform2ui", "glUniform2uiv", "glUniform3f", "glUniform3fv", "glUniform3i", "glUniform3iv", "glUniform3ui", "glUniform3uiv", "glUniform4f", "glUniform4fv", "glUniform4i", "glUniform4iv", "glUniform4ui", "glUniform4uiv", "glUniformBlockBinding", "glUniformMatrix2fv", "glUniformMatrix2x3fv", "glUniformMatrix2x4fv", "glUniformMatrix3fv", "glUniformMatrix3x2fv", "glUniformMatrix3x4fv", "glUniformMatrix4fv", "glUniformMatrix4x2fv", "glUniformMatrix4x3fv", "glUniformSubroutines", "glUniformSubroutinesuiv", "glUnmapBuffer", "glUnmapNamedBuffer", "glUseProgram", "glUseProgramStages", "glValidateProgram", "glValidateProgramPipeline", "glVertexArrayAttribBinding", "glVertexArrayAttribFormat", "glVertexArrayAttribIFormat", "glVertexArrayAttribLFormat", "glVertexArrayBindingDivisor", "glVertexArrayElementBuffer", "glVertexArrayVertexBuffer", "glVertexArrayVertexBuffers", "glVertexAttrib", "glVertexAttrib1d", "glVertexAttrib1dv", "glVertexAttrib1f", "glVertexAttrib1fv", "glVertexAttrib1s", "glVertexAttrib1sv", "glVertexAttrib2d", "glVertexAttrib2dv", "glVertexAttrib2f", "glVertexAttrib2fv", "glVertexAttrib2s", "glVertexAttrib2sv", "glVertexAttrib3d", "glVertexAttrib3dv", "glVertexAttrib3f", "glVertexAttrib3fv", "glVertexAttrib3s", "glVertexAttrib3sv", "glVertexAttrib4bv", "glVertexAttrib4d", "glVertexAttrib4dv", "glVertexAttrib4f", "glVertexAttrib4fv", "glVertexAttrib4iv", "glVertexAttrib4Nbv", "glVertexAttrib4Niv", "glVertexAttrib4Nsv", "glVertexAttrib4Nub", "glVertexAttrib4Nubv", "glVertexAttrib4Nuiv", "glVertexAttrib4Nusv", "glVertexAttrib4s", "glVertexAttrib4sv", "glVertexAttrib4ubv", "glVertexAttrib4uiv", "glVertexAttrib4usv", "glVertexAttribBinding", "glVertexAttribDivisor", "glVertexAttribFormat", "glVertexAttribI1i", "glVertexAttribI1iv", "glVertexAttribI1ui", "glVertexAttribI1uiv", "glVertexAttribI2i", "glVertexAttribI2iv", "glVertexAttribI2ui", "glVertexAttribI2uiv", "glVertexAttribI3i", "glVertexAttribI3iv", "glVertexAttribI3ui", "glVertexAttribI3uiv", "glVertexAttribI4bv", "glVertexAttribI4i", "glVertexAttribI4iv", "glVertexAttribI4sv", "glVertexAttribI4ubv", "glVertexAttribI4ui", "glVertexAttribI4uiv", "glVertexAttribI4usv", "glVertexAttribIFormat", "glVertexAttribIPointer", "glVertexAttribL1d", "glVertexAttribL1dv", "glVertexAttribL2d", "glVertexAttribL2dv", "glVertexAttribL3d", "glVertexAttribL3dv", "glVertexAttribL4d", "glVertexAttribL4dv", "glVertexAttribLFormat", "glVertexAttribLPointer", "glVertexAttribP1ui", "glVertexAttribP2ui", "glVertexAttribP3ui", "glVertexAttribP4ui", "glVertexAttribPointer", "glVertexBindingDivisor", "glViewport", "glViewportArray", "glViewportArrayv", "glViewportIndexed", "glViewportIndexedf", "glViewportIndexedfv", "glWaitSync", "gl_ClipDistance", "gl_CullDistance", "gl_FragCoord", "gl_FragDepth", "gl_FrontFacing", "gl_GlobalInvocationID", "gl_HelperInvocation", "gl_InstanceID", "gl_InvocationID", "gl_Layer", "gl_LocalInvocationID", "gl_LocalInvocationIndex", "gl_NumSamples", "gl_NumWorkGroups", "gl_PatchVerticesIn", "gl_PointCoord", "gl_PointSize", "gl_Position", "gl_PrimitiveID", "gl_PrimitiveIDIn", "gl_SampleID", "gl_SampleMask", "gl_SampleMaskIn", "gl_SamplePosition", "gl_TessCoord", "gl_TessLevelInner", "gl_TessLevelOuter", "gl_VertexID", "gl_ViewportIndex", "gl_WorkGroupID", "gl_WorkGroupSize", "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", "noise", "noise1", "noise2", "noise3", "noise4", "normalize", "not", "notEqual", "outerProduct", "packDouble2x32", "packHalf2x16", "packSnorm2x16", "packSnorm4x8", "packUnorm", "packUnorm2x16", "packUnorm4x8", "pow", "radians", "reflect", "refract", "removedTypes", "round", "roundEven", "sign", "sin", "sinh", "smoothstep", "sqrt", "step", "tan", "tanh", "texelFetch", "texelFetchOffset", "texture", "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", "unpackUnorm", "unpackUnorm2x16", "unpackUnorm4x8", "usubBorrow" }; language.identifiers.clear(); for (auto& identifier : identifiers) { language.identifiers.insert(identifier); } initialized = true; } return language; }