Declare requested GLES version in very first line of shader:
#version 300 esYou can also use 310 es or 320 es if your device supports it.
In GLES 3.x, fragment output changes from gl_FragColor to your own out vec4 variable.
ShaderEditor detects version directive and creates matching GLES context automatically.
Do not put comments or blank lines before #version ....
Some devices limit GPU usage to consume less power when not plugged in. Always check performance with soft keyboard hidden and power cord off.
As rough rule, shader should make at least around 30 FPS to avoid slowing down UI.
If it does not, lower render quality with quality spinner (1/2, 1/4, etc.).
Live wallpaper should only consume battery when you actually see it. So real impact depends on how often and how long you look at it. With normal use, you usually should not notice much difference.
When Save battery is enabled, rendering pauses on low battery to reduce power use further.
Unfortunately error information is disabled on some devices and GPU drivers. Error highlighting and reporting are not possible on those devices.
Shader can still compile and run normally even when driver does not report useful error logs.
You need to set ShaderEditor as live wallpaper first. Go to system Settings → Display → Wallpaper → Live Wallpapers and choose Shader Editor.
As soon as Shader Wallpaper is active live wallpaper, you can change what shader is running from app menu with Set as wallpaper and Update wallpaper.
This is system limitation. Android only allows one camera to be opened at a time. No app can use both front and back camera simultaneously.
Most probably time is medium precision float in fragment shader.
That is default on many devices and it eventually loses precision.
Try high precision if hardware supports it:
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endifOr use second, subsecond, or ftime uniforms instead.
See issue #10 for details.
Declare backbuffer like this:
uniform sampler2D backbuffer;Then sample previous frame with something like:
vec4 prev = texture2D(backbuffer, uv);This enables stateful effects like trails, blur, feedback, and cellular automata.
If you add ///p:noise after declaration, backbuffer starts with noise texture instead of black:
uniform sampler2D backbuffer;///p:noiseYes.
If pasted code contains mainImage(), ShaderEditor automatically converts common ShaderToy names:
iResolution→resolutioniGlobalTime→timeiMouse→mouseiDate→date
A wrapper main() is generated automatically.
Use Settings → Import/Export Database to back up and restore entire shader collection, including textures.
On older Android versions (below 10), you can also export individual .glsl files to Downloads/ShaderEditor.
Yes. Open Menu → Add Uniform → 2D Textures or Cube Maps tab. Pick image, crop if needed, set sampler parameters like wrap and filter, and ShaderEditor inserts uniform declaration into code.
ShaderEditor injects this line automatically into every shader:
#define SHADER_EDITOR 1Use #ifdef SHADER_EDITOR when you want code that only runs inside ShaderEditor.
Useful for portable shaders shared with other GLSL environments.
Several popular coding fonts are built in, including JetBrains Mono, Fira Code, and Source Code Pro. Ligature support can be toggled independently.
Choose font in Settings → Editor → Font.
Use quality spinner in toolbar.
Values range from 1/32 up to 2×.
Lower values render at fraction of screen resolution and can greatly improve performance or battery life. Each shader remembers its own quality setting.