Предполагая, что у меня есть холст WebGL (вызывая getContext ("экспериментальный-webgl")).
Есть ли способ позже переключить контекст для использования "2d"?
Целью такой вещи было бы отображение отладочной BSOD-подобной ошибки при рендеринге.
Если это невозможно, то:
- Могу ли я вставить HTML-элемент поверх холста и заставить этот элемент иметь то же самое, что и холст (даже если последний размер был изменен)?
- Могу ли я заменить dom-узел и обновить каждую ссылку на старый, чтобы отразить изменение?
[редактировать] Это мой текущий минимальный код вызова. Canvas - это DOM-узел, содержащий canvas, который заполняется WebGL API, а обратный вызов - это функция, которая обрабатывает один кадр.
function failure(cvs, e) {
var ctx = cvs.getContext('2d'); // Fail here, returns `null' if cvs.getContext('webgl') has been called
ctx.fillStyle = 'rgb(0, 0, 0)';
ctx.fillRect(0, 0, cvs.width, cvs.height);
ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.font = 'bold 12px sans-serif';
ctx.fillText(e.toString(), 0, 0);
}
function foobar(canvas, callback) {
try {
callback();
} catch (e) {
failure(canvas, e);
throw e;
} finally {
requestAnimationFrame(arguments.callee);
}
}