【发布时间】:2014-03-19 22:20:17
【问题描述】:
根据我几年的图形编程经验,我学到的一件事是,您永远不应该将图形上下文的引用传递给对象并在程序执行期间对其进行操作(JOGL 明确指出这一点)。当图形设备 (GPU) 被重置、关闭或其他一些奇怪的事情发生时,上下文可能会失效。 我最近重新研究了 XNA 4.0 中的编程,我的一个项目涉及需要了解窗口/视口大小、调整窗口大小以及动态缓冲区何时丢失其内容的对象(要求缓冲区为在可能无效的 GraphicsDevice 上重建)。我没有将 GraphicsDevice 和 GameWindow 传递给更新阶段或 Disposal 的众多方法,而是选择将它们传递给构造函数。例如:
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 ...
}
这样做是否安全,或者我需要注意在后台发生的事情?
【问题讨论】: