Reverting screen optimization to use SetInterval and didChange

This commit is contained in:
Sam El-Husseini 2017-12-19 12:53:12 -08:00
parent e07d6e3a31
commit 785ddff706
2 changed files with 15 additions and 4 deletions

View File

@ -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;
}
} }
} }

View File

@ -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;