GLSL Backend¶
The GLSL backend covers OpenGL-style shader generation and GLSL source import.
It is selected through the glsl, opengl, or ogl aliases in the
translator registry.
Pipeline¶
CrossGL output generation is implemented by
crosstl.translator.codegen.GLSL_codegen.GLSLCodeGen. It emits GLSL from the
shared translator AST, including version/preprocessor lines, uniform blocks,
resource declarations, stage inputs and outputs, and main functions for
stage entry points.
Reverse translation uses crosstl.backend.GLSL.OpenglLexer.GLSLLexer and
crosstl.backend.GLSL.OpenglParser.GLSLParser to parse GLSL source into the
OpenGL backend AST. crosstl.backend.GLSL.openglCrossglCodegen converts that
tree back into CrossGL syntax.
Supported Surface¶
The backend is the primary path for OpenGL and Vulkan-style GLSL authoring:
shader stages including vertex, fragment, compute, geometry, tessellation, mesh/task, and ray tracing-style qualifiers where represented in the AST
#versionand other preprocessor directives, precision statements, layout qualifiers, interface blocks, and uniform blockssampler, image, texture, and atomic functions mapped to GLSL intrinsics
built-in variables such as
gl_Position,gl_FragDepth,gl_GlobalInvocationID, and related compute identifiersGLSL cbuffer lowering to
layout(std140, binding = N) uniformblocks
Implementation Notes¶
GLSL differs from HLSL and Metal because stage entry points lower to main
and stage structs may need to be flattened into global in and out
declarations. Keep flattening behavior near GLSLCodeGen stage helpers, and
use the shared codegen utilities only for backend-neutral operations such as
array declarators, resource array hints, and stage-name normalization.
When adding syntax support, update both source import and target generation when the behavior is intended to be bidirectional. If support is intentionally one-way, document that limitation here.