remove old desktop/web folders

This commit is contained in:
kirjavascript 2022-06-15 19:19:41 +01:00
parent a734488a5f
commit aa0e8b9f2f
13 changed files with 0 additions and 562 deletions

View file

@ -2,8 +2,6 @@
members = [
"emu",
"web",
"desktop",
"frontend",
]

View file

@ -1,10 +0,0 @@
[package]
name = "desktop"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
emu = { path = "../emu" }
fltk = { version = "^1" }

View file

@ -1,208 +0,0 @@
use fltk::{
app,
draw,
button::Button,
frame::Frame,
input::IntInput,
prelude::*,
window::Window,
text::{TextBuffer, TextDisplay},
enums::Key,
};
use std::cell::RefCell;
use std::rc::Rc;
use std::time::Instant;
use emu::Megadrive;
pub enum Msg {
Step, Frame
}
macro_rules! clone {
( $( $x:ident ),* => $y:expr ) => {
{
$(let $x = $x.clone();)*
$y
}
};
}
fn main() {
let app = app::App::default();
// let buf: Vec<u8> = include_bytes!("./roms/joy_speed_v1.02.bin").to_vec();
// let buf: Vec<u8> = include_bytes!("./roms/Window Test by Fonzie (PD).bin").to_vec();
let buf: Vec<u8> = include_bytes!("../../notes/test-roms/240ptestsuite/240pSuite-1.23.bin").to_vec();
// let buf: Vec<u8> = include_bytes!("../../notes/pc.md").to_vec();
// let buf: Vec<u8> = include_bytes!("/home/cake/Genesis/Golden Axe II (W) [!].bin").to_vec();
// let buf: Vec<u8> = include_bytes!("/home/cake/sonic/roms/s2.bin").to_vec();
let mut emu = Megadrive::new(buf);
let mut wind = Window::new(100, 100, 800, 600, "trueLMAO");
let mut but = Button::new(400, 350, 80, 40, "frame");
let mut step = Button::new(400, 400, 80, 40, "step");
let stepby = IntInput::new(400, 450, 80, 40, "step by");
let mut info = TextDisplay::new(0, 0, 500, 300, "asm");
let mut toggle = Button::new(400, 300, 80, 40, "stop");
stepby.set_value("1");
let mut pal = Frame::new(0, 300, 16, 4, "");
let mut palbuf: Vec<u8> = vec![0xFF; (16 * 4 * 3) as usize];
let mut vram = Frame::new(500, 0, 256, 513, "");
let mut vrambuf: Vec<u8> = vec![0xFF; (256 * 513 * 3) as usize];
let mut screen = Frame::new(0, 350, 320, 240, "");
wind.end();
wind.show();
unsafe {
draw::draw_rgb_nocopy(&mut pal, &palbuf);
draw::draw_rgb_nocopy(&mut vram, &vrambuf);
draw::draw_rgb_nocopy(&mut screen, &emu.gfx.screen);
}
pal.set_size(160,40);
info.set_buffer(TextBuffer::default());
let mut buffer = info.buffer().unwrap();
let name = emu.core.mem.rom.domestic_name()
.split_whitespace().collect::<Vec<&str>>().join(" ");
wind.set_label(&format!("trueLMAO - {}", name));
let running = Rc::from(RefCell::from(true));
toggle.set_callback(clone!(running => move |toggle| {
let toggled = !*running.borrow();
*running.borrow_mut() = toggled;
toggle.set_label(if toggled { "stop" } else { "go" });
}));
let messages = Rc::from(RefCell::from(Vec::new()));
but.set_callback(clone!(messages => move |_| {
messages.borrow_mut().push(Msg::Frame);
}));
step.set_callback(clone!(messages => move |_| {
messages.borrow_mut().push(Msg::Step);
}));
while app.wait() {
let start = Instant::now();
// bad temp gamepad code:
let mut gamepad = 0;
if app::event_key_down(Key::from_char('w')) { gamepad |= 1; }
if app::event_key_down(Key::from_char('s')) { gamepad |= 1 << 1; }
if app::event_key_down(Key::from_char('a')) { gamepad |= 1 << 2; }
if app::event_key_down(Key::from_char('d')) { gamepad |= 1 << 3; }
if app::event_key_down(Key::from_char(',')) { gamepad |= 1 << 6; }
if app::event_key_down(Key::from_char('.')) { gamepad |= 1 << 4; }
if app::event_key_down(Key::from_char('/')) { gamepad |= 1 << 5; }
if app::event_key_down(Key::ShiftR) { gamepad |= 1 << 7; }
emu.core.mem.io.gamepad[0].set(gamepad);
while let Some(msg) = messages.borrow_mut().pop() {
match msg {
Msg::Step => {
emu.step_n(stepby.value().parse::<usize>().unwrap_or(1));
},
Msg::Frame => {
emu.frame(true);
},
}
}
if *running.borrow() {
emu.frame(true);
}
let mut debug = String::new();
debug.push_str(&format!("PC: {:X}\n\n", emu.core.pc));
// let v = emu.core.mem.vdp.VSRAM.iter().map(|x|format!("{:X}", x)).collect::<Vec<String>>().join(" ");
// debug.push_str(&format!("VSRAM: {}\n\n", v));
debug.push_str(&format!("D "));
for i in 0..=7 {
debug.push_str(&format!("{:X} ", emu.core.dar[i]));
}
debug.push_str(&format!("\n"));
debug.push_str(&format!("A "));
for i in 0..=7 {
debug.push_str(&format!("{:X} ", emu.core.dar[i + 8]));
}
debug.push_str(&format!("\n"));
debug.push_str(&format!("\n"));
for (pc, opcode) in emu.disasm() {
debug.push_str(&format!("0x{:X}\t{}\n", pc, opcode));
}
buffer.set_text(&debug);
// render CRAM
let cram_rgb = emu.core.mem.vdp.cram_rgb();
for (i, (red, green, blue)) in cram_rgb.iter().enumerate() {
let index = i * 3;
palbuf[index] = *red;
palbuf[index+1] = *green;
palbuf[index+2] = *blue;
}
// render VRAM
for (i, duxels) in emu.core.mem.vdp.VRAM.chunks(32).enumerate() {
let x_base = (i % 32) * 3 * 8;
let y_base = (i / 32) * 3 * 8 * 256;
let mut x = 0;
let mut y = 0;
let mut tile = vec![];
for duxel in duxels {
let first = (*duxel & 0xF0) >> 4;
let second = *duxel & 0xF;
tile.push(first);
tile.push(second);
}
for pixel in tile {
let (r, g, b) = cram_rgb[pixel as usize];
let base = x_base + y_base + x + y;
if base+2 > vrambuf.len() {
break;
}
vrambuf[base] = r;
vrambuf[base+1] = g;
vrambuf[base+2] = b;
x += 3;
if x >= (8 * 3) {
x = 0;
y += 256 * 3;
}
}
}
wind.redraw();
let end = Instant::now();
let render_time = (end-start).as_secs_f64();
let frame_time = 1./60.;
app::sleep(frame_time - render_time);
}
}

View file

@ -59,8 +59,6 @@ fn cram_to_rgb(color: u16) -> (u8, u8, u8) {
}
impl VDP {
// 91
// 13.2
pub fn new() -> Self {
Self {
VRAM: [0; 0x10000],

View file

@ -1,12 +0,0 @@
[package]
name = "web"
version = "0.1.0"
edition = "2018"
[lib]
crate-type = ["cdylib"]
[dependencies]
emu = { path = "../emu" }
lazy_mut = "0.1.0"
wasm-bindgen = "*"

View file

@ -1,38 +0,0 @@
const controls = new Set([]);
window.addEventListener('blur', () => { controls.clear(); });
window.addEventListener('focus', () => { controls.clear(); });
const keymap = {};
[
[1 << 7, ['Enter', 'Shift']], // start
[1 << 6, ['z', 'Z', ',', '<']], // A
[1 << 5, ['c', 'C', '/', '?']], // C
[1 << 4, ['x', 'X', '.', '>', ' ']], // B
[1 << 3, ['ArrowRight', 'd', 'D']], // R
[1 << 2, ['ArrowLeft', 'a', 'A']], // L
[1 << 1, ['ArrowDown', 's', 'S']], // D
[1, ['ArrowUp', 'w', 'W']], // U
].forEach(([value, keys]) => {
keys.forEach(key => { keymap[key] = value; });
});
const html = document.documentElement;
html.addEventListener('keydown', e => {
if (e.key in keymap) {
controls.add(e.key);
e.preventDefault();
}
});
html.addEventListener('keyup', e => {
if (e.key in keymap) {
controls.delete(e.key);
e.preventDefault();
}
});
export default function() {
return [...controls].reduce((a, c) => a | keymap[c], 0);
}

View file

@ -1,60 +0,0 @@
import init from '../pkg/web.js';
import gamepad from './gamepad.js';
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d', { alpha: false });
const img = ctx.createImageData(320, 240);
(async () => {
const emu = await init('emu.wasm');
function draw() {
const buffer = new Uint8ClampedArray(
emu.memory.buffer, emu.screen(), 320 * 240 * 3
);
for (let i = 0; i < 320*240; i++) {
const bufferIndex = i * 3;
const imgIndex = i * 4;
img.data[imgIndex+0] = buffer[bufferIndex+0];
img.data[imgIndex+1] = buffer[bufferIndex+1];
img.data[imgIndex+2] = buffer[bufferIndex+2];
img.data[imgIndex+3] = 255;
}
ctx.putImageData(img, 0, 0);
// ctx.putImageData(new ImageData(buffer, 320), 0, 0);
// TODO: webgl
}
const frameCount = document.querySelector('.frameCount');
const epoch = performance.now();
let framesDone = 0;
const loop = () => {
requestAnimationFrame(loop);
const diff = performance.now() - epoch;
const frames = diff * 0.06 | 0; // real value is 0.05992274
const frameAmount = frames - framesDone;
frameCount.textContent = String(frameAmount);
if (document.visibilityState !== 'hidden') {
emu.gamepad_p1(gamepad());
if (frameAmount > 5) {
emu.frame(true);
} else {
for (let i = 0; i < frameAmount; i++) {
emu.frame(i === frameAmount - 1);
}
}
if (frameAmount > 0) {
draw();
}
}
framesDone = frames;
};
loop();
})();

View file

@ -1,9 +0,0 @@
#!/bin/sh
wasm-pack build --release --target web --out-dir pkg
cp pkg/web_bg.wasm static/emu.wasm
# develop
# https://www.npmjs.com/package/local-web-server
# trap 'kill %1; kill %2' SIGINT
# cargo watch -s 'wasm-pack build --target web && cp pkg/web_bg.wasm static/emu.wasm' -w src -w ../emu &
# ws --spa index.html --directory static &

View file

@ -1,9 +0,0 @@
{
"scripts": {
"watch": "esbuild app/main.js --bundle --watch --outfile=static/main.js",
"build": "esbuild app/main.js --bundle --minify --outfile=static/main.js"
},
"dependencies": {
"esbuild": "^0.14.23"
}
}

View file

@ -1,25 +0,0 @@
use wasm_bindgen::prelude::*;
use lazy_mut::lazy_mut;
use emu::Megadrive;
lazy_mut! {
static mut EMU: Megadrive = Megadrive::new(
include_bytes!("/home/cake/sonic/roms/s2.bin").to_vec()
);
}
#[wasm_bindgen]
pub fn frame(render: bool) {
unsafe { EMU.frame(render); }
}
#[wasm_bindgen]
pub fn screen() -> *const u8 {
unsafe { EMU.gfx.screen.as_ptr() }
}
#[wasm_bindgen]
pub fn gamepad_p1(value: usize) {
unsafe { EMU.core.mem.io.gamepad[0].set(value) }
}

View file

@ -1,2 +0,0 @@
*.js
*.wasm

View file

@ -1,57 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1"
name="viewport"
/>
<link
href="data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAdJ6tAP///wAmOUAAq6ahAIpyUwB4TxkA45MrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAZjMzMAAABmZjERETMAAGZjERERERAAZmMREiIhFABmZzIlIiIwQGZ3d1IiACAAZ3d3IiIAUAB3d3ciIgB3AHd3dyIiB3cAd3d3QiRXd1B3d3V0RXd3cHYzd1d3d3cAdjERdVVXdwBmMRZ1d3d2AHdhZ3d3d2YAd2Z3d3dwZgBgPwAAAA8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAADAAAAAwAAAAMAAAADAAAAEwAA"
rel="icon"
type="image/x-icon"
/>
<style>
canvas {
width: 100%;
max-height: 90vh;
box-shadow: 2px 2px 5px black;
/*
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
image-rendering: crisp-edges;
*/
}
main {
width: 800px;
}
html, body {
height: 100%;
margin: 0;
background-color: #111;
color: #777;
}
body {
display: flex;
justify-content: center;
align-items: center;
font-family: monospace;
}
h1, span {
font-size: 15px;
margin: 6px 0;
}
</style>
<title>trueLMAO</title>
</head>
<body>
<noscript>noscript mode</noscript>
<main>
<canvas width="320" height="224"></canvas>
<h1>DEMO</h1>
<span class="frameCount"></span>
</main>
<script src="./main.js"></script>
</body>
</html>

View file

@ -1,128 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
esbuild-android-arm64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz#c89b3c50b4f47668dcbeb0b34ee4615258818e71"
integrity sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==
esbuild-darwin-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz#1c131e8cb133ed935ca32f824349a117c896a15b"
integrity sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==
esbuild-darwin-arm64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz#3c6245a50109dd84953f53d7833bd3b4f0e8c6fa"
integrity sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==
esbuild-freebsd-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz#0cdc54e72d3dd9cd992f9c2960055e68a7f8650c"
integrity sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==
esbuild-freebsd-arm64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz#1d11faed3a0c429e99b7dddef84103eb509788b2"
integrity sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==
esbuild-linux-32@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz#fd9f033fc27dcab61100cb1eb1c936893a68c841"
integrity sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==
esbuild-linux-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz#c04c438514f1359ecb1529205d0c836d4165f198"
integrity sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==
esbuild-linux-arm64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz#d1b3ab2988ab0734886eb9e811726f7db099ab96"
integrity sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==
esbuild-linux-arm@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz#df7558b6a5076f5eb9fd387c8704f768b61d97fb"
integrity sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==
esbuild-linux-mips64le@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz#bb4c47fccc9493d460ffeb1f88e8a97a98a14f8b"
integrity sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==
esbuild-linux-ppc64le@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz#a332dbc8a1b4e30cfe1261bfaa5cef57c9c8c02a"
integrity sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==
esbuild-linux-riscv64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz#85675f3f931f5cd7cfb238fd82f77a62ffcb6d86"
integrity sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==
esbuild-linux-s390x@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz#a526282a696e6d846f4c628f5315475518c0c0f0"
integrity sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==
esbuild-netbsd-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz#8e456605694719aa1be4be266d6cd569c06dfaf5"
integrity sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==
esbuild-openbsd-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz#f2fc51714b4ddabc86e4eb30ca101dd325db2f7d"
integrity sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==
esbuild-sunos-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz#a408f33ea20e215909e20173a0fd78b1aaad1f8e"
integrity sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==
esbuild-windows-32@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz#b9005bbff54dac3975ff355d5de2b5e37165d128"
integrity sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==
esbuild-windows-64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz#2b5a99befeaca6aefdad32d738b945730a60a060"
integrity sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==
esbuild-windows-arm64@0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz#edc560bbadb097eb45fc235aeacb942cb94a38c0"
integrity sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==
esbuild@^0.14.23:
version "0.14.23"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.23.tgz#95e842cb22bc0c7d82c140adc16788aac91469fe"
integrity sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==
optionalDependencies:
esbuild-android-arm64 "0.14.23"
esbuild-darwin-64 "0.14.23"
esbuild-darwin-arm64 "0.14.23"
esbuild-freebsd-64 "0.14.23"
esbuild-freebsd-arm64 "0.14.23"
esbuild-linux-32 "0.14.23"
esbuild-linux-64 "0.14.23"
esbuild-linux-arm "0.14.23"
esbuild-linux-arm64 "0.14.23"
esbuild-linux-mips64le "0.14.23"
esbuild-linux-ppc64le "0.14.23"
esbuild-linux-riscv64 "0.14.23"
esbuild-linux-s390x "0.14.23"
esbuild-netbsd-64 "0.14.23"
esbuild-openbsd-64 "0.14.23"
esbuild-sunos-64 "0.14.23"
esbuild-windows-32 "0.14.23"
esbuild-windows-64 "0.14.23"
esbuild-windows-arm64 "0.14.23"
three@^0.137.5:
version "0.137.5"
resolved "https://registry.yarnpkg.com/three/-/three-0.137.5.tgz#a1e34bedd0412f2d8797112973dfadac78022ce6"
integrity sha512-rTyr+HDFxjnN8+N/guZjDgfVxgHptZQpf6xfL/Mo7a5JYIFwK6tAq3bzxYYB4Ae0RosDZlDuP+X5aXDXz+XnHQ==