在提出問題之前,我將公開部分代碼以更好地解釋它。OpenGL在使用鼠標點擊回調與鼠標光標移動時未處理的異常
我使用OpenGL 3.3
和GLFW
來處理鼠標事件。
我有我的OpenGL class
:
class OpenGL
{
public:
OpenGL();
~OpenGL();
private:
//(...)
void registerCallBacks();
static void mouseMove(GLFWwindow* window, double xpos, double ypos);
static void mouseClick(GLFWwindow* window, int button, int action, int mods);
GLFWwindow* m_window;
};
我在哪裏註冊callbacks
的鼠標事件。
void OpenGL::registerCallBacks()
{
glfwSetWindowUserPointer(m_window, this);
glfwSetCursorPosCallback(m_window, mouseMove);
glfwSetMouseButtonCallback(m_window, mouseClick);
}
從回調調用的方法是這些的(這在頭文件是static
):
void OpenGL::mouseMove(GLFWwindow* window, double xpos, double ypos)
{
void* userPointer = glfwGetWindowUserPointer(window);
Mouse* mousePointer = static_cast<Mouse*>(userPointer);
mousePointer->move(xpos,ypos); //EXECUTE MOVE AND CRASH on glfwSwapBuffers()
}
void OpenGL::mouseClick(GLFWwindow* window, int button, int action, int mods)
{
void* userPointer = glfwGetWindowUserPointer(window);
Mouse* mousePointer = static_cast<Mouse*>(userPointer);
mousePointer->click(button,action); //EXECUTE CLICK AND IT'S OK!!
}
正如你所看到的,我有處理鼠標事件鼠標類:
class Mouse
{
public:
Mouse();
~Mouse();
void click(const int button, const int action); //called from the mouseClick() in the OpenGL class
void move(const double x, const double y); //called from the mouseMove() in the OpenGL class
private:
double m_x;
double m_y;
};
凡move
方法僅僅是這樣的:
void Mouse::move(const double x, const double y)
{
m_x = x;
m_y = y;
}
而且click
方法僅僅是這樣的:
void Mouse::click(const int button, const int action)
{
printf("button:%d, action:%d\n",button, action);
}
我的問題/問題是:
我openGL的主迴路有:glfwSwapBuffers(m_window);
在循環結束後,將上崩潰這條線,如果我使用Mouse::move()
方法如上所示。 如果我評論move()
方法的內容,根本沒有問題。
而且我甚至可以正確地看到click()
的printf's
。
我看到了move()和點擊()方法沒有差別......
這到底是怎麼回事?爲什麼只有當我使用move()
時,崩潰纔出現在glfwSwapBuffers(m_window);
上?爲什麼不在click()
中,因爲兩者的構造方式都是相同的,分別使用它們的callbacks
?
注:我需要使用move()
方法,「拯救」鼠標座標,到後來上使用,在click()
方法。
的錯誤:
Unhandled exception at 0x001F2F14 in TheGame.exe: 0xC0000005: Access violation reading location 0x4072822C.
謝謝@derhass :)你是對的! – waas1919