graphics
This commit is contained in:
parent
d7c2d5adb9
commit
e85dbb1a33
93
graphics.ts
93
graphics.ts
@ -1,93 +0,0 @@
|
||||
import {
|
||||
DwmWindow,
|
||||
gl
|
||||
} from "./deps.ts";
|
||||
|
||||
function loadShader(type: number, src: string) {
|
||||
const shader = gl.CreateShader(type);
|
||||
gl.ShaderSource(
|
||||
shader,
|
||||
1,
|
||||
new Uint8Array(
|
||||
new BigUint64Array([
|
||||
BigInt(
|
||||
Deno.UnsafePointer.value(
|
||||
Deno.UnsafePointer.of(new TextEncoder().encode(src)),
|
||||
),
|
||||
),
|
||||
]).buffer,
|
||||
),
|
||||
new Int32Array([src.length]),
|
||||
);
|
||||
gl.CompileShader(shader);
|
||||
const status = new Int32Array(1);
|
||||
gl.GetShaderiv(shader, gl.COMPILE_STATUS, status);
|
||||
if (status[0] === gl.FALSE) {
|
||||
const logLength = new Int32Array(1);
|
||||
gl.GetShaderiv(shader, gl.INFO_LOG_LENGTH, logLength);
|
||||
const log = new Uint8Array(logLength[0]);
|
||||
gl.GetShaderInfoLog(shader, logLength[0], logLength, log);
|
||||
console.log(new TextDecoder().decode(log));
|
||||
gl.DeleteShader(shader);
|
||||
return 0;
|
||||
}
|
||||
return shader;
|
||||
}
|
||||
|
||||
const vShaderSrc = `
|
||||
attribute vec4 vPosition;
|
||||
void main() {
|
||||
gl_Position = vPosition;
|
||||
}
|
||||
`;
|
||||
|
||||
const fShaderSrc = `
|
||||
void main() {
|
||||
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
|
||||
}
|
||||
`;
|
||||
|
||||
const vShader = loadShader(gl.VERTEX_SHADER, vShaderSrc);
|
||||
const fShader = loadShader(gl.FRAGMENT_SHADER, fShaderSrc);
|
||||
|
||||
const program = gl.CreateProgram();
|
||||
gl.AttachShader(program, vShader);
|
||||
gl.AttachShader(program, fShader);
|
||||
|
||||
gl.BindAttribLocation(program, 0, new TextEncoder().encode("vPosition\0"));
|
||||
|
||||
gl.LinkProgram(program);
|
||||
|
||||
const status = new Int32Array(1);
|
||||
gl.GetProgramiv(program, gl.LINK_STATUS, status);
|
||||
if (status[0] === gl.FALSE) {
|
||||
const logLength = new Int32Array(1);
|
||||
gl.GetProgramiv(program, gl.INFO_LOG_LENGTH, logLength);
|
||||
const log = new Uint8Array(logLength[0]);
|
||||
gl.GetProgramInfoLog(program, logLength[0], logLength, log);
|
||||
console.log(new TextDecoder().decode(log));
|
||||
gl.DeleteProgram(program);
|
||||
Deno.exit(1);
|
||||
}
|
||||
|
||||
gl.ClearColor(0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
addEventListener("resize", (event) => {
|
||||
gl.Viewport(0, 0, event.width, event.height);
|
||||
});
|
||||
|
||||
export const makeFrameFunc = (swapBuffers: DwmWindow["swapBuffers"]) => {
|
||||
return () => {
|
||||
gl.Clear(gl.COLOR_BUFFER_BIT);
|
||||
gl.UseProgram(program);
|
||||
// deno-fmt-ignore
|
||||
gl.VertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 0, new Float32Array([
|
||||
0.0, 0.5, 0.0,
|
||||
-0.5, 0.0, 0.0,
|
||||
0.5, 0.0, 0.0,
|
||||
]));
|
||||
gl.EnableVertexAttribArray(0);
|
||||
gl.DrawArrays(gl.TRIANGLES, 0, 3);
|
||||
swapBuffers();
|
||||
}
|
||||
}
|
96
index.ts
96
index.ts
@ -6,10 +6,10 @@ import {
|
||||
} from "./deps.ts";
|
||||
|
||||
const window = createWindow({
|
||||
title: "DenoGL",
|
||||
width: 800,
|
||||
height: 600,
|
||||
resizable: true,
|
||||
title: "Faux",
|
||||
width: 1024,
|
||||
height: 1024,
|
||||
resizable: false,
|
||||
glVersion: [3, 2],
|
||||
gles: true,
|
||||
});
|
||||
@ -48,17 +48,22 @@ function loadShader(type: number, src: string) {
|
||||
}
|
||||
|
||||
const vShaderSrc = `
|
||||
attribute vec4 vPosition;
|
||||
void main() {
|
||||
attribute vec4 vPosition;
|
||||
attribute vec4 vCol;
|
||||
varying vec4 color;
|
||||
void main() {
|
||||
gl_Position = vPosition;
|
||||
}
|
||||
`;
|
||||
color = vCol;
|
||||
}
|
||||
`;
|
||||
|
||||
const fShaderSrc = `
|
||||
void main() {
|
||||
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
|
||||
}
|
||||
`;
|
||||
precision mediump float;
|
||||
varying vec4 color;
|
||||
void main() {
|
||||
gl_FragColor = color;
|
||||
}
|
||||
`;
|
||||
|
||||
const vShader = loadShader(gl.VERTEX_SHADER, vShaderSrc);
|
||||
const fShader = loadShader(gl.FRAGMENT_SHADER, fShaderSrc);
|
||||
@ -68,6 +73,7 @@ gl.AttachShader(program, vShader);
|
||||
gl.AttachShader(program, fShader);
|
||||
|
||||
gl.BindAttribLocation(program, 0, new TextEncoder().encode("vPosition\0"));
|
||||
gl.BindAttribLocation(program, 1, new TextEncoder().encode("vCol\0"));
|
||||
|
||||
gl.LinkProgram(program);
|
||||
|
||||
@ -89,18 +95,68 @@ addEventListener("resize", (event) => {
|
||||
gl.Viewport(0, 0, event.width, event.height);
|
||||
});
|
||||
|
||||
const pixelsPerRow = 128;
|
||||
|
||||
const top = 1;
|
||||
const left = -1;
|
||||
const cell = 2/pixelsPerRow;
|
||||
|
||||
const px = (x: number, y: number) => {
|
||||
// deno-fmt-ignore
|
||||
return [
|
||||
left + x*cell, top - y*cell, 0,
|
||||
left + (x+1)*cell, top - y*cell, 0,
|
||||
left + x*cell, top - (y+1)*cell, 0,
|
||||
left + (x+1)*cell, top - y*cell, 0,
|
||||
left + x*cell, top - (y+1)*cell, 0,
|
||||
left + (x+1)*cell, top - (y+1)*cell, 0,
|
||||
];
|
||||
}
|
||||
|
||||
const palette = [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 1],
|
||||
[1, 1, 1, 1],
|
||||
[1, 0, 0, 1],
|
||||
[1, 1, 0, 1],
|
||||
[0, 1, 0, 1],
|
||||
[0, 0, 1, 1],
|
||||
]
|
||||
|
||||
const c = (n: number) => {
|
||||
return [
|
||||
...palette[n],
|
||||
...palette[n],
|
||||
...palette[n],
|
||||
...palette[n],
|
||||
...palette[n],
|
||||
...palette[n],
|
||||
];
|
||||
}
|
||||
|
||||
const allPixelTriangles = new Float32Array(
|
||||
Array(pixelsPerRow*pixelsPerRow).fill(null).flatMap((_, i) => px(i%pixelsPerRow,Math.floor(i/pixelsPerRow)))
|
||||
)
|
||||
|
||||
const choose = <T>(alts: Array<T>): T => {
|
||||
return alts[Math.floor(Math.random()*alts.length)];
|
||||
}
|
||||
|
||||
const allPixelColors = new Float32Array(
|
||||
Array(pixelsPerRow*pixelsPerRow).fill(null).flatMap(() => c(choose([1,2,3,4,5,6])))
|
||||
)
|
||||
|
||||
const frame = () => {
|
||||
gl.Clear(gl.COLOR_BUFFER_BIT);
|
||||
gl.UseProgram(program);
|
||||
// deno-fmt-ignore
|
||||
gl.VertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 0, new Float32Array([
|
||||
0.0, 0.5, 0.0,
|
||||
-0.5, 0.0, 0.0,
|
||||
0.5, 0.0, 0.0,
|
||||
]));
|
||||
gl.VertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 0, allPixelTriangles);
|
||||
gl.VertexAttribPointer(1, 4, gl.FLOAT, gl.FALSE, 0, allPixelColors);
|
||||
gl.EnableVertexAttribArray(0);
|
||||
gl.DrawArrays(gl.TRIANGLES, 0, 3);
|
||||
gl.EnableVertexAttribArray(1);
|
||||
gl.DrawArrays(gl.TRIANGLES, 0, 6*pixelsPerRow*pixelsPerRow);
|
||||
window.swapBuffers();
|
||||
}
|
||||
|
||||
await mainloop(frame);
|
||||
await mainloop(() => {
|
||||
frame();
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user