recovery kinda
This commit is contained in:
commit
24d7e4675b
|
@ -0,0 +1,30 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
<meta name="darkreader-lock" />
|
||||
<meta name="color-scheme" content="dark" />
|
||||
|
||||
<script src="/js/main.js" type="module" defer></script>
|
||||
|
||||
<title>asdfasdfasdfsd</title>
|
||||
|
||||
<script>
|
||||
void 0;
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<canvas id="bg"></canvas>
|
||||
<main>
|
||||
<h1>Title</h1>
|
||||
</main>
|
||||
<footer>
|
||||
<p>page footer</p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,102 @@
|
|||
/* Canvas set-up */
|
||||
var canvas = document.getElementsByTagName("canvas")[0];
|
||||
var gl = canvas.getContext("webgl", {
|
||||
antialias: false,
|
||||
preserveDrawingBuffer: false,
|
||||
});
|
||||
|
||||
function resizeCanvas() {
|
||||
const scl = (p) => Math.trunc(p / 8);
|
||||
|
||||
var width = scl(gl.canvas.clientWidth);
|
||||
var height = scl(gl.canvas.clientHeight);
|
||||
|
||||
if (gl.canvas.width != width || gl.canvas.height != height) {
|
||||
gl.canvas.width = width;
|
||||
gl.canvas.height = height;
|
||||
|
||||
gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
|
||||
}
|
||||
|
||||
return [width, height];
|
||||
}
|
||||
|
||||
resizeCanvas();
|
||||
|
||||
/* WebGL set-up */
|
||||
gl.clearColor(0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
/* Fetch shader programs */
|
||||
const fetchText = async (url) => (await fetch(url)).text();
|
||||
|
||||
var vsSrc = await fetchText("/shader/bg.vert");
|
||||
var fsSrc = await fetchText("/shader/bg.frag");
|
||||
|
||||
/* Compile vertex shader */
|
||||
var vs = gl.createShader(gl.VERTEX_SHADER);
|
||||
gl.shaderSource(vs, vsSrc);
|
||||
gl.compileShader(vs);
|
||||
|
||||
/* Compile fragment shader */
|
||||
var fs = gl.createShader(gl.FRAGMENT_SHADER);
|
||||
gl.shaderSource(fs, fsSrc);
|
||||
gl.compileShader(fs);
|
||||
|
||||
/* Create and use program */
|
||||
var program = gl.createProgram();
|
||||
gl.attachShader(program, vs);
|
||||
gl.attachShader(program, fs);
|
||||
gl.linkProgram(program);
|
||||
gl.useProgram(program);
|
||||
|
||||
/* Get attributes and uniforms */
|
||||
var a_position = gl.getAttribLocation(program, "a_position");
|
||||
var u_time = gl.getUniformLocation(program, "u_time");
|
||||
var u_resolution = gl.getUniformLocation(program, "u_resolution");
|
||||
|
||||
/* Vertices */
|
||||
const verts = new Float32Array([
|
||||
-1.0, +1.0, -1.0, -1.0, +1.0, +1.0, +1.0, -1.0,
|
||||
]);
|
||||
|
||||
/* Create vertex buffer */
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
|
||||
gl.bufferData(gl.ARRAY_BUFFER, verts, gl.STATIC_DRAW);
|
||||
|
||||
/* Bind vertices */
|
||||
gl.vertexAttribPointer(
|
||||
a_position,
|
||||
2,
|
||||
gl.FLOAT,
|
||||
false,
|
||||
verts.BYTES_PER_ELEMENT * 2,
|
||||
0,
|
||||
);
|
||||
gl.enableVertexAttribArray(a_position);
|
||||
|
||||
/* Draw */
|
||||
var startTime = performance.now();
|
||||
function draw() {
|
||||
requestAnimationFrame(draw);
|
||||
|
||||
/* Get time */
|
||||
var nowTime = performance.now() - startTime;
|
||||
if (nowTime >= 8.0) {
|
||||
startTime = 0;
|
||||
}
|
||||
nowTime /= 1000;
|
||||
|
||||
/* Resize canvas */
|
||||
resizeCanvas();
|
||||
|
||||
/* Set uniforms */
|
||||
gl.uniform1f(u_time, nowTime);
|
||||
gl.uniform2fv(u_resolution, [gl.drawingBufferWidth, gl.drawingBufferHeight]);
|
||||
|
||||
// Draw triangles
|
||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
||||
}
|
||||
|
||||
/* Start !! */
|
||||
requestAnimationFrame(draw);
|
|
@ -0,0 +1,3 @@
|
|||
------------- ** fonts ** -------------
|
||||
https://www.pentacom.jp/pentacom/bitfontmaker2/gallery/
|
||||
https://humantooth.neocities.org/freefonts
|
|
@ -0,0 +1,69 @@
|
|||
precision mediump float;
|
||||
|
||||
uniform float u_time;
|
||||
uniform vec2 u_resolution;
|
||||
|
||||
const vec2 zero = vec2(0.0);
|
||||
|
||||
const vec4 darker = vec4(0.0235, 0.0274, 0.0549, 1.0);
|
||||
const vec4 lighter = vec4(0.1058, 0.1137, 0.1450, 1.0);
|
||||
|
||||
vec3 mod289(vec3 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
vec2 mod289(vec2 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
vec3 permute(vec3 x) {
|
||||
return mod289(((x * 34.0) + 10.0) * x);
|
||||
}
|
||||
|
||||
float snoise(vec2 v) {
|
||||
const vec4 C = vec4(0.211324865405187,
|
||||
0.366025403784439,
|
||||
-0.577350269189626,
|
||||
0.024390243902439);
|
||||
vec2 i = floor(v + dot(v, C.yy));
|
||||
vec2 x0 = v - i + dot(i, C.xx);
|
||||
vec2 i1;
|
||||
i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
|
||||
vec4 x12 = x0.xyxy + C.xxzz;
|
||||
x12.xy -= i1;
|
||||
i = mod289(i);
|
||||
vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0))
|
||||
+ i.x + vec3(0.0, i1.x, 1.0));
|
||||
vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0);
|
||||
m = m * m;
|
||||
m = m * m;
|
||||
vec3 x = 2.0 * fract(p * C.www) - 1.0;
|
||||
vec3 h = abs(x) - 0.5;
|
||||
vec3 ox = floor(x + 0.5);
|
||||
vec3 a0 = x - ox;
|
||||
m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);
|
||||
vec3 g;
|
||||
g.x = a0.x * x0.x + h.x * x0.y;
|
||||
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
||||
return 130.0 * dot(m, g);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 center = u_resolution / 2.0;
|
||||
|
||||
// calculate coord scale factor
|
||||
float shortside = min(u_resolution.x, u_resolution.y);
|
||||
vec2 scale2square = u_resolution / vec2(shortside);
|
||||
|
||||
// subtract center to avoid misalignment
|
||||
vec2 hereuncenter = gl_FragCoord.xy - center;
|
||||
vec2 herescaled = (hereuncenter / scale2square) + center;
|
||||
|
||||
// get distance from center
|
||||
float dist = distance(herescaled, center);
|
||||
float distf = smoothstep(0.0, shortside, dist);
|
||||
|
||||
float second = floor(u_time * 1.1);
|
||||
float noise = snoise(vec2(herescaled.x * herescaled.y, second));
|
||||
float final = (distf + noise) / 2.0;
|
||||
|
||||
gl_FragColor = mix(lighter, darker, noise);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
precision lowp float;
|
||||
|
||||
attribute vec4 a_position;
|
||||
|
||||
void main() {
|
||||
gl_Position = a_position;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
:root {
|
||||
--bg: #080810;
|
||||
--fg1: #ffffff;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow: hidden;
|
||||
|
||||
background: var(--bg);
|
||||
color: var(--fg1);
|
||||
}
|
||||
|
||||
#bg {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
canvas {
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
main {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
}
|
Loading…
Reference in New Issue