Drawing a Diagonal Line with GLSL
This is the fourth post in the GlSL learning series.
- Learning GLSL as a Beginner
- Understanding gl-Position: My First Real Vertex Shader
- Fragment Shaders Made Simple: What gl-FragColor Does
What This Shader Does
This shader creates a grayscale gradient and then draws a green diagonal line across the screen.
The line runs from the bottom-left corner to the top-right corner because the shader compares the X coordinate with the Y coordinate. Whenever they become equal, a line is drawn.
Breaking It Down
Precision Declaration
#ifdef GL_ES
precision mediump float;
#endif
This tells OpenGL ES devices how accurately floating point numbers should be calculated.
mediump= medium precision- Mostly used on mobile devices
Uniform Variables
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
Uniforms are values sent into the shader from the outside.
u_resolution= size of the screenu_mouse= mouse positionu_time= elapsed time
In this shader only u_resolution is actually used.
Plot Function
float plot(vec2 st) {
return smoothstep(0.02, 0.0, abs(st.y - st.x));
}
This function creates the line.
Let's look at the important part:
abs(st.y - st.x)
When:
st.y == st.x
the result becomes:
0.0
This means the pixel sits exactly on the diagonal line.
The smoothstep() function then softens the edges so the line appears smooth rather than jagged.
Normalized Coordinates
vec2 st = gl_FragCoord.xy/u_resolution;
gl_FragCoord.xy gives the current pixel position.
By dividing by the screen resolution, the coordinates become normalized:
Bottom Left = (0,0)
Top Right = (1,1)
This makes the shader work on any screen size.
Creating a Gradient
float y = st.x;
vec3 color = vec3(y);
Since st.x moves from 0 to 1 across the screen:
Left side = black
Right side = white
This creates a grayscale gradient.
Drawing the Line
float pct = plot(st);
The plot() function returns:
1.0 near the line
0.0 away from the line
Then:
color = (1.0-pct)*color+pct*vec3(0.0,1.0,0.0);
This blends between:
- Original grayscale color
- Green color
When pct is 1, the pixel becomes fully green.
When pct is 0, the original gradient remains.
Final Output
gl_FragColor = vec4(color,1.0);
The final RGB color is displayed with full opacity.
Visual Result
White
│
│ /
│ /
│ /
│ /
│ /
│ /
│ /
│/
Black ─────────►
- Background = black-to-white horizontal gradient
- Green diagonal line = where X equals Y
Leave Drawing a Diagonal Line with GLSL to:
Read more #tutorial posts
Best Posts From hey2d
We have not curated any of hey2d's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From hey2d
- GLSL Lesson 4: Reshaping Light and Shadow with pow()
- GLSL Lesson 3: Understanding clamp() by Breaking and Fixing Colors
- Gradients: When Color Learns About Position
- Your First Shader: Painting the Entire Screen One Color
- The Strange Case of vUv.st: Why GLSL Keeps Swapping Coordinate Names
- Lesson 9 — HSB: When Color Stops Being Fixed and Starts Becoming a Space
- Gradients, Distance, and Why Shaders Start With a Line
- Why Xbox and the Big Gaming Companies Are Actually Terrified
- Gaming Just Became the Biggest Entertainment Business on Earth
- The Strange Case of vUv.st: Why GLSL Keeps Swapping Coordinate Names