從我幾年圖形編程經驗的,有一件事我學到的是,你不應該在參考傳遞給圖形上下文的對象,並對其進行了程序的時間進行操作(JOGL明確指出這一點)。當圖形設備(GPU)等設備被重置,關閉或其他奇怪的事情發生時,上下文可能會失效。 我最近回顧了XNA 4.0中的編程問題,其中一個項目涉及需要了解窗口/視口大小的對象,窗口大小調整時以及動態緩衝區丟失了其內容(需要緩衝區在可能無效的GraphicsDevice上重建)。我沒有將GraphicsDevice和GameWindow傳遞給更新階段或Disposal中的許多方法,而是選擇將它們傳遞給構造函數。例如:XNA 4的GraphicsDevice
public Camera(GameWindow w, GraphicsDeviceManager m) {
// ... Yada-yada matrices
gdm = m;
window = w;
window.ClientSizeChanged += OnWindowResize;
}
public void Dispose() {
window.ClientSizeChanged -= OnWindowResize;
window = null;
gdm = null;
}
// Control Logic ...
public void OnWindowResize(object Sender, EventArgs args) {
Vector2 s = new Vector2(gdm.GraphicsDevice.Viewport.TitleSafeArea.Width, gdm.GraphicsDevice.Viewport.TitleSafeArea.Height);
// Recalculate Projection ...
}
它是安全的做這樣的事情,或者是東西,我需要知道的背景下發生的?