MODULE shader; FROM tigr IMPORT TigrPtr, tigrWindow, tigrFree, tigrClosed, tigrClear, tigrUpdate, tigrPrint, tfont, TK_ESCAPE, tigrKeyDown, tigrSetPostShader, tigrSetPostFX, tigrTime; FROM helper IMPORT tigrRGB; CONST fxShader = "void fxShader(out vec4 color, in vec2 uv) {vec2 tex_size = vec2(textureSize(image, 0));vec4 c = texture(image, (floor(uv * tex_size) + 0.5 * sin(parameters.x)) / tex_size);color = c;}"; VAR screen : TigrPtr; duration, phase : SHORTREAL; p : SHORTREAL; BEGIN screen := tigrWindow(320, 240, "Shady", 0); tigrSetPostShader(screen, fxShader, HIGH(fxShader)); duration := 1.0; phase := 0.0; WHILE (NOT (tigrClosed(screen) > 0)) AND (NOT (tigrKeyDown(screen, TK_ESCAPE) > 0)) DO phase := phase + tigrTime(); WHILE phase > duration DO phase := phase - duration END; p := 6.28 * phase / duration; tigrSetPostFX(screen, p, 0.0, 0.0, 0.0); tigrClear(screen, tigrRGB(80H, 90H, 0A0H)); tigrPrint(screen, tfont, 120, 110, tigrRGB(0FFH, 0FFH, 0FFH), "Shady business"); tigrUpdate(screen); END; tigrFree(screen); END shader.