Reverting screen optimization to use SetInterval and didChange
This commit is contained in:
parent
e07d6e3a31
commit
785ddff706
@ -7,6 +7,7 @@ namespace pxsim {
|
|||||||
|
|
||||||
|
|
||||||
export class EV3ScreenState {
|
export class EV3ScreenState {
|
||||||
|
changed: boolean
|
||||||
points: Uint8Array;
|
points: Uint8Array;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.points = new Uint8Array(visuals.SCREEN_WIDTH * visuals.SCREEN_HEIGHT)
|
this.points = new Uint8Array(visuals.SCREEN_WIDTH * visuals.SCREEN_HEIGHT)
|
||||||
@ -23,13 +24,13 @@ namespace pxsim {
|
|||||||
|
|
||||||
setPixel(x: number, y: number, v: number) {
|
setPixel(x: number, y: number, v: number) {
|
||||||
this.applyMode(OFF(x, y), v)
|
this.applyMode(OFF(x, y), v)
|
||||||
runtime.queueDisplayUpdate();
|
this.changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
for (let i = 0; i < this.points.length; ++i)
|
for (let i = 0; i < this.points.length; ++i)
|
||||||
this.points[i] = 0;
|
this.points[i] = 0;
|
||||||
runtime.queueDisplayUpdate();
|
this.changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
blitLineCore(x: number, y: number, w: number, buf: RefBuffer, mode: Draw, offset = 0) {
|
blitLineCore(x: number, y: number, w: number, buf: RefBuffer, mode: Draw, offset = 0) {
|
||||||
@ -58,7 +59,7 @@ namespace pxsim {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
runtime.queueDisplayUpdate();
|
this.changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
clearLine(x: number, y: number, w: number) {
|
clearLine(x: number, y: number, w: number) {
|
||||||
@ -72,6 +73,12 @@ namespace pxsim {
|
|||||||
off++
|
off++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
didChange() {
|
||||||
|
const res = this.changed;
|
||||||
|
this.changed = false;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,6 +136,10 @@ namespace pxsim.visuals {
|
|||||||
this.board.updateSubscribers.push(() => this.updateState());
|
this.board.updateSubscribers.push(() => this.updateState());
|
||||||
this.updateState();
|
this.updateState();
|
||||||
}
|
}
|
||||||
|
let that = this;
|
||||||
|
window.setInterval(function(){
|
||||||
|
that.updateScreen();
|
||||||
|
}, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getView(): SVGAndSize<SVGSVGElement> {
|
public getView(): SVGAndSize<SVGSVGElement> {
|
||||||
@ -169,7 +173,6 @@ namespace pxsim.visuals {
|
|||||||
|
|
||||||
public updateState() {
|
public updateState() {
|
||||||
this.updateVisibleNodes();
|
this.updateVisibleNodes();
|
||||||
this.updateScreen();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateVisibleNodes() {
|
private updateVisibleNodes() {
|
||||||
@ -396,6 +399,7 @@ namespace pxsim.visuals {
|
|||||||
|
|
||||||
private updateScreen() {
|
private updateScreen() {
|
||||||
let state = ev3board().screenState;
|
let state = ev3board().screenState;
|
||||||
|
if (!state.didChange()) return;
|
||||||
|
|
||||||
const bBox = this.layoutView.getBrick().getScreenBBox();
|
const bBox = this.layoutView.getBrick().getScreenBBox();
|
||||||
if (!bBox || bBox.width == 0) return;
|
if (!bBox || bBox.width == 0) return;
|
||||||
|
Loading…
Reference in New Issue
Block a user