From the web

Circular Gallery

An image strip that bends into an arc as it moves.

OGL · GLSL

Planes are placed along a line and bent in the vertex shader, so the strip curves like film around a drum while you drag it.

Each plane is a flat strip of vertices positioned along X. The vertex shader takes every vertex's world x and lifts it by the circle sagitta, R minus sqrt(R squared minus x squared), then rotates the vertex's height offset by the tangent angle so the image follows the arc. Scroll is kept in plane units and wrapped with a modulo for the infinite loop, while a velocity uniform drives a small wave that fades when the strip stops.

vec2 p = position.xy * uSize;
float wx = uCenter + p.x;          // world x of this vertex
float arc = 0.0;
float a = 0.0;
if (uR > 0.0) {
  float c = clamp(wx, -uR * 0.97, uR * 0.97);
  arc = uR - sqrt(uR * uR - c * c); // smile: edges rise
  a = asin(c / uR);                 // tangent angle here
}
vec3 pos = vec3(wx - p.y * sin(a), arc + p.y * cos(a), 0.0);

// velocity-driven wave, flat when still
pos.z += sin(position.x * 4.71 + uTime * 5.0) * uSpeed * uSize.x * 0.12;
pos.y += sin(position.x * 3.14 + uTime * 4.0) * uSpeed * uSize.y * 0.04;