How to Start #1
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 0 — Define the “golden path”
Before writing real code, lock this in mentally:
Nothing else matters until this is rock-solid.
Phase 1 — Minimal fullscreen layer-shell client (NO GL)
Goal
Show a solid-color fullscreen surface on all outputs and keep it visible forever.
What you implement
wl_displayconnectRegistry bind:
wl_compositorwl_outputzwlr_layer_shell_v1Output tracking
One
wl_surface+zwlr_layer_surface_v1per outputHard requirements
overlay-1exclusiveIf this fails, your lock is not secure.
Success criteria
👉 Stop here until this works perfectly.
Phase 2 — Frame callbacks (still NO GL)
Goal
Prove you can drive animation without busy-looping.
What you add
wl_surface_frameFor now:
Success criteria
If you can’t get frame callbacks right, GL will stutter later.
Phase 3 — EGL + OpenGL (still NO particles)
Goal
Clear the screen using OpenGL on every frame.
What you add
wayland-eglEGLDisplay,EGLContext,EGLSurfaceRender loop:
Success criteria
At this point, you officially “own” the GPU as a client.
Phase 4 — One compute shader, zero text
Goal
Prove compute shaders work in your environment.
What you add
One SSBO
One compute shader that:
Render that point
Success criteria
dtThis validates your “everything on GPU” rule.
Phase 5 — Text mask upload (CPU → GPU, ONCE)
Goal
Upload a bitmap and sample it in a shader.
What you add
R8textureSuccess criteria
Phase 6 — GPU particle spawn pass
Goal
Spawn particles from the text mask on the GPU.
What you add
Compute shader:
Fixed max particle count
Success criteria
Phase 7 — Vector field + failure animation
Goal
Wrong password triggers chaos.
What you add
locked / failed)Success criteria
Phase 8 — Input + PAM
Goal
Make it real.
What you add
wl_keyboardxkbcommonRender loop never blocks.
Phase 9 — Hardening
You handle:
This is what separates demos from lockscreens.