Что сделать, чтобы элемент Canvas не очищался при каждом новом шаге?
public draw(gl: GL): void {
// position: Point;
this.backGL.startDrawing(-position.x, -position.y, this.backGL.getWidth(), this.backGL.getHeight());
// Рисование (без использования метода clean)
this.backGL.endDrawing();
}
Класс GL:
public startDrawing(x: number = 0, y: number = 0, width: number = this.width, height: number = this.height): void {
this.vertexPositions = [];
this.vertexColors = [];
this.translationPoint = new Point(0, 0);
this.scalingPoint = new Point(1, 1);
this.loadIdentity();
this.projection = makeOrtho(x, x + width, y + height, y, 0.1, 100);
}
public endDrawing(): void {
// this.clear(); // Я не использую функцию clean, но canvas всё-равно очищается
this.mvTranslate([this.translationPoint.x, this.translationPoint.y, -10]);
this.mvMatrix.x(Matrix.Diagonal([this.scalingPoint.x, this.scalingPoint.y, 1, 1]));
this.context.bindBuffer(this.context.ARRAY_BUFFER, this.squareVerticesBuffer);
this.context.bufferData(this.context.ARRAY_BUFFER, new Float32Array(this.vertexPositions), this.context.STATIC_DRAW);
this.context.vertexAttribPointer(this.vertexPositionAttribute, 3, this.context.FLOAT, false, 0, 0);
this.context.bindBuffer(this.context.ARRAY_BUFFER, this.squareVerticesColorBuffer);
this.context.bufferData(this.context.ARRAY_BUFFER, new Float32Array(this.vertexColors), this.context.STATIC_DRAW);
this.context.vertexAttribPointer(this.vertexColorAttribute, 4, this.context.FLOAT, false, 0, 0);
this.setMatrixUniform(this.projection, "uPMatrix");
this.setMatrixUniform(this.mvMatrix, "uMVMatrix");
this.context.drawArrays(this.context.TRIANGLES, 0, this.vertexPositions.length / 3);
}
Проблему решил сам. Оставлю ответ здесь, может кому пригодится.
При получении контекста Canvas нужно указать, что буффер рисования нужно не заменять, его нужно копировать. Делается это добавлением {preserveDrawingBuffer: true} в качестве второго аргумента в функции получения контекста.
Пример:
// var canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(id);
this.context =
canvas.getContext("webgl", {preserveDrawingBuffer: true}) ||
canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Все предлагают запоминать состояние в событиях mousedown, mouseup
Сейчас большинство использует js, но что если я пишу на dart? Я имею ввиду, dart ведь легко конвертируется в js (dart2js)Просто на js очень мало писал и не знаю,...