Skip to content

Commit

Permalink
fix: render
Browse files Browse the repository at this point in the history
  • Loading branch information
qq15725 committed Mar 6, 2025
1 parent ca8d80f commit 9695a06
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 39 deletions.
84 changes: 58 additions & 26 deletions docs/src/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,67 @@ import { render } from '../../src'
async function init(): Promise<void> {
fonts.fallbackFont = await fonts.load({ family: 'fallbackFont', src: '/fonts/AaHouDiHei.woff' })

document.body.append(
await render({
data: [
{
tag: 'Image2D',
props: {
style: { left: 0, top: 0, width: 100, height: 100 },
src: '/example.jpg',
},
render({
debug: true,
data: [
{
tag: 'Image2D',
props: {
style: { left: 0, top: 0, width: 100, height: 100 },
src: '/example.jpg',
},
{
tag: 'Image2D',
props: {
style: { left: 100, top: 100, width: 100, height: 100 },
src: '/example.jpg',
},
},
{
tag: 'Image2D',
props: {
style: { left: 100, top: 100, width: 100, height: 100 },
src: '/example.jpg',
},
{
tag: 'Text2D',
props: {
style: { left: 200, top: 200, width: 100, height: 100 },
content: '/example.jpg',
},
},
{
tag: 'Text2D',
props: {
style: { left: 200, top: 200, width: 100, height: 100 },
content: '/example.jpg',
},
],
width: 500,
height: 500,
}),
)
},
],
width: 500,
height: 500,
}).then((res) => {
document.body.append(res)
})

render({
debug: true,
data: [
{
tag: 'Image2D',
props: {
style: { left: 0, top: 0, width: 100, height: 100 },
src: '/example.jpg',
},
},
{
tag: 'Image2D',
props: {
style: { left: 100, top: 100, width: 100, height: 100 },
src: '/example.jpg',
},
},
{
tag: 'Text2D',
props: {
style: { left: 200, top: 200, width: 100, height: 100 },
content: '/example.jpg',
},
},
],
width: 150,
height: 150,
}).then((res) => {
document.body.append(res)
})
}

init()
3 changes: 2 additions & 1 deletion src/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,9 @@ export class Engine extends SceneTree {
}

async waitAndRender(delta = 0): Promise<void> {
await assets.waitUntilLoad()
this._process(delta)
await this.waitUntilLoad()
await this.nextTick()
this._render(this.renderer)
}

Expand Down
4 changes: 2 additions & 2 deletions src/core/renderer/webgl/modules/WebGLFramebufferModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,8 @@ export class WebGLFramebufferModule extends WebGLModule {
this._renderer.viewport.bind({
x: 0,
y: 0,
width: this._renderer.screen.width,
height: this._renderer.screen.height,
width: this._renderer.screen.width * this._renderer.pixelRatio,
height: this._renderer.screen.height * this._renderer.pixelRatio,
})
}
}
Expand Down
13 changes: 9 additions & 4 deletions src/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export interface RenderOptions {
data: Record<string, any> | Node | (Node | Record<string, any>)[]
width: number
height: number
debug?: boolean
time?: number
onBeforeRender?: (engine: Engine) => void | Promise<void>
}
Expand Down Expand Up @@ -36,12 +37,16 @@ async function start(sleep = 100): Promise<void> {
}

async function task(options: RenderOptions): Promise<HTMLCanvasElement> {
const { data, width, height, time = 0 } = options

engine ??= new Engine({ width: 1, height: 1 })
const { data, width, height, debug = false, time = 0 } = options
engine ??= new Engine({
width: 1,
height: 1,
preserveDrawingBuffer: true,
})
engine.debug = debug
engine.root.removeChildren()
engine.timeline.currentTime = time
engine.resize(width, height)
engine.resize(width, height, true)
;(Array.isArray(data) ? data : [data]).forEach((v) => {
if (v instanceof Node) {
engine!.root.appendChild(v)
Expand Down
14 changes: 13 additions & 1 deletion src/scene/main/Node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import type {
InputEventKey,
InputEventMap,
Maskable,
WebGLRenderer } from '../../core'
PropertyDeclaration,
WebGLRenderer,
} from '../../core'
import type { SceneTree } from './SceneTree'
import type { Viewport } from './Viewport'
import { clamp,
Expand Down Expand Up @@ -227,6 +229,16 @@ export class Node extends CoreObject {
}
}

protected override _update(changed: Map<PropertyKey, any>): void {
this._tree?.log(this.name, 'updating')
super._update(changed)
}

protected override _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void {
this._tree?.log(this.name, `updating [${String(key)}]`)
super._updateProperty(key, value, oldValue, declaration)
}

protected _onTreeEnter(tree: SceneTree): void {
this._treeEnter(tree)
this.emit('treeEntered', tree)
Expand Down
6 changes: 2 additions & 4 deletions src/scene/main/SceneTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,12 @@ export class SceneTree extends MainLoop {

protected _renderScreen(renderer: WebGLRenderer): void {
renderer.state.reset()
const { pixelRatio } = renderer
const { width, height } = this.root
renderer.framebuffer.bind(null)
renderer.viewport.bind({
x: 0,
y: 0,
width: width * pixelRatio,
height: height * pixelRatio,
width: this.root.width * renderer.pixelRatio,
height: this.root.height * renderer.pixelRatio,
})
if (this.backgroundColor) {
renderer.gl.clearColor(...this._backgroundColor.toArray())
Expand Down
2 changes: 1 addition & 1 deletion src/scene/main/Viewport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ export class Viewport extends Node implements Rectangulable {
if (this.valid) {
renderer.flush()
this._tree?.setCurrentViewport(this)
renderer.framebuffer.bind(this._glFramebuffer(renderer))
this.upload(renderer)
renderer.framebuffer.bind(this._glFramebuffer(renderer))
return true
}
return false
Expand Down

0 comments on commit 9695a06

Please sign in to comment.