Files
cell/tests/bunnymark.js
John Alanbrook 938da0d4dc
Some checks failed
Build and Deploy / build-windows (CLANG64) (push) Has been cancelled
Build and Deploy / build-linux (push) Successful in 1m44s
Build and Deploy / build-macos (push) Has been cancelled
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled
Use thin lto for release builds; move 'strip' to meson.build for release
2025-05-05 13:55:09 -05:00

103 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// bunnymark
var render = use('render')
var os = use('os')
var dim = [500,500]
render.initialize({
width:dim.x,
height:dim.y,
resolution_x:dim.x,
resolution_y:dim.y,
mode:"letterboxed",
refresh: 60,
})
var camera = {
size: [500,500],
transform: os.make_transform(),
fov:50,
near_z: 0,
far_z: 1000,
surface: undefined,
viewport: {x:0,y:0,width:1,height:1},
ortho:true,
anchor:[0,0],
}
var draw = use('draw2d')
var sprite = use('lcdsprite')
var graphics = use('graphics')
var bunny = graphics.texture('tests/bunny')
var center = [0.5,0.5]
var vel = 50
function hsl_to_rgb(h, s, l) {
var c = (1 - Math.abs(2 * l - 1)) * s
var x = c * (1 - Math.abs((h / 60) % 2 - 1))
var m = l - c / 2
var r = 0, g = 0, b = 0
if (h < 60) { r = c; g = x }
else if (h < 120) { r = x; g = c }
else if (h < 180) { g = c; b = x }
else if (h < 240) { g = x; b = c }
else if (h < 300) { r = x; b = c }
else { r = c; b = x }
return [r + m, g + m, b + m, 1] // 01 floats, alpha = 1
}
var bunny_count = 2000
for (var i = 0; i < bunny_count; i++) {
var pct = i/bunny_count
var sp = sprite.create(bunny, [Math.random()*dim.x*pct, Math.random()*dim.y*pct], center)
sp.dir = [Math.random()*vel, Math.random()*vel]
var hue = 270 * i / bunny_count
sp.color = hsl_to_rgb(hue, 0.5, 0.5)
}
function movendraw(sp)
{
sp.move([sp.dir[0]*dt, sp.dir[1]*dt])
// sp.draw()
}
var dt = 0
var fps_samples = []
var fps_window = 10
var fps_update_period = 0.5
var last_fps_update = os.now()
function loop()
{
var now = os.now()
render.clear([22/255,120/255,194/255,255/255])
render.camera(camera)
// sprite.forEach(movendraw)
var queue = sprite.queue()
for (var q of queue)
render.geometry(q.image.texture, q.mesh)
render.present()
dt = os.now() - now
fps_samples.push(dt)
if (fps_samples.length > fps_window) fps_samples.shift()
if (now - last_fps_update >= fps_update_period) {
var sum = 0
for (var i = 0; i < fps_samples.length; i++) sum += fps_samples[i]
prosperon.window.title = `Bunnymark [fps: ${(fps_samples.length/sum).toFixed(1)}]`;
last_fps_update = now
}
var delay = (1/60) - dt
$_.delay(loop, delay)
}
loop()