// 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] // 0‒1 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()