Added a Display struct and animation frames

This commit is contained in:
2023-02-02 23:18:04 -06:00
parent 5259d6ee8c
commit 26cccd77b1
2 changed files with 39 additions and 17 deletions
+16 -7
View File
@@ -1,16 +1,25 @@
import React, { useState, useCallback, useEffect, useRef } from 'react'
import { WasmCPU } from '../pkg/vweb.js'
import React, { useCallback, useEffect, useRef } from 'react'
import { WasmCPU, Display } from '../pkg/vweb.js'
export default function({}) {
const canvas = useRef(null)
const [ctx, setCtx] = useState(null)
const [cpu, _setCpu] = useState(new WasmCPU())
const cpu = useRef(new WasmCPU())
const ctx = useRef(null)
const display = useRef(null)
const request = useRef(null)
const drawFrame = useCallback(() => {
display.current.draw(cpu.current, ctx.current)
request.current = requestAnimationFrame(drawFrame)
}, [])
useEffect(() => {
const c = canvas.current.getContext('2d')
setCtx(c)
cpu.draw_frame(c)
ctx.current = canvas.current.getContext('2d')
display.current = new Display()
request.current = requestAnimationFrame(drawFrame)
return () => cancelAnimationFrame(request.current)
}, [canvas.current])
return (
<canvas ref={canvas} width={640} height={480}></canvas>
)