Files
cell/tests/bunnymark.js

105 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 transform = use('transform')
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: new 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 = 20
for (var i = 0; i < bunny_count; i++) {
var pct = i/bunny_count
var hue = 270 * i / bunny_count
var sp = sprite.create(bunny, {
pos: [Math.random()*dim.x*pct, Math.random()*dim.y*pct],
center,
color: hsl_to_rgb(hue, 0.5, 0.5)
})
sp.dir = [Math.random()*vel, Math.random()*vel]
}
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(x => x.move(x.dir.scale(dt)))
var queue = sprite.queue()
//console.log(json.encode(queue))
for (var q of queue) {
if (!q.image) continue
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()