2016-05-12 3 views
1

Я пишу приложение webgl и пытаюсь восстановить контекст webgl после его потери, но событие, восстановленное в контексте, похоже, не срабатывает.webglcontextrestored event not firing after context lost

Я запускаю следующий код и ожидаю, что оба «контекста потеряли» и «восстановленный контекст» будут зарегистрированы на основе WebGL specification и документации по WebGL wiki. Когда я запускаю код ниже в jsfiddle как в Chrome (50.0.2661.102 м), так и в Firefox (46.0.1), я вижу «потерянный контекст», но не «восстановленный контекст», и я наблюдаю то же поведение в своем электронном приложении ,

var canvas = document.createElement('canvas') 
var gl = canvas.getContext("webgl"); 
var WEBGL_lose_context = gl.getExtension('WEBGL_lose_context'); 

canvas.addEventListener("webglcontextlost", function(e) { 
    log("context lost"); 
    e.preventDefault(); 
}, false); 

canvas.addEventListener("webglcontextrestored", function() { 
    log("context restored"); 
}, false); 

WEBGL_lose_context.loseContext(); 

function log(msg) { 
    var div = document.createElement("pre"); 
    div.appendChild(document.createTextNode(msg)); 
    document.body.appendChild(div); 
} 

Нужно ли мне что-либо делать, чтобы восстановить событие, вызванное контекстом? Я неправильно понял спецификацию WebGL?

ответ

1

При использовании WEBGL_lose_context необходимо позвонить по телефону WEBGL_lose_context.restoreContext(). WEBGL_lose_context предназначен только для тестирования. В нормальном случае браузер должен решить, когда восстановить контекст. Например, если вы - вкладка, а не вкладка спереди, а на другой вкладке требуется вся память WebGL, ваша вкладка может получить потерянное контекстное событие. Позже, когда вы на вкладке сделаете активную вкладку, вы, наконец, получите событие контекста восстановления. не

See conformance test here

+0

Примечание стороны: вызов 'getExtension («WEBGL_lose_context»)' больше не работает после потери контекста, так что вам нужно кэшировать расширение где-то. – Thomas