【发布时间】:2013-12-27 06:25:36
【问题描述】:
我目前正在开发一个使用 OpenGL 和 GLFW 的跨平台 2D 渲染引擎。我有一个名为 GameWindow 的基窗口类,以及一个继承 GameWindow 的名为 Game 的类。 Game 重写了基类中的一些虚拟方法,以便 GameWindow 可以处理帧限制等。在 GameWindow 的构造函数中,我使用 glfwSetWindowSizeCallback 指定在调整窗口大小时要运行的方法。该方法然后调用 GameWindow 的虚拟 on_resize 方法,该方法会触发 Game 中的覆盖方法。从 GameWindow 中调用任何虚拟方法具有调用 Game 中适当方法的预期效果。但是,如果从 GameWindow 中的窗口调整大小回调调用虚拟方法,应用程序将崩溃。我通过存储 GameWindow 的静态实例并从回调中调用它的 on_resize 方法来解决这个问题。但是,我宁愿不必这样做。这个问题有更好的解决方法吗?提前致谢。
~迈克尔·K。
class GameWindow : Object {
GLFWwindow* win;
...
public GameWindow(...) {
...
glfwSetWindowSizeCallback(win, (GLFWwindowsizefun)window_size_callback);
}
public void run(...) {
...
on_render(renderElapsed); // This works fine.
...
}
public virtual void on_resize(int width, int height) {}
public void window_size_callback(GLFWwindow* window, int width, int height) {
...
on_resize(width, height); // This causes a crash.
}
}
class Game : GameWindow {
...
public override void on_render(double time) { ... }
public override void on_resize(int width, int height) { ... }
}
【问题讨论】: