使用鼠标单击与鼠标光标移动的回调时的OpenGL未处理的异常

waas1919

在提出问题之前,我将介绍部分代码以更好地解释它。

我正在使用OpenGL 3.3GLFW用于鼠标事件。

我有我的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!!
}

如您所见,我有一个处理鼠标事件的Mouse类:

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()方法的内容,那完全没有问题。

我什printf's可以click()正确地看到

我发现move()和click()方法之间没有区别...

这是怎么回事 为什么glfwSwapBuffers(m_window);只有在使用时才会出现崩溃move()又为什么不click()使用它们各自使用相同的方式构造它们callbacks呢?

注意:我确实需要使用该move()方法来“保存”鼠标坐标,以便稍后在该click()方法上使用。

错误:

Unhandled exception at 0x001F2F14 in TheGame.exe: 0xC0000005: Access violation reading location 0x4072822C.

您正在将GLFW的用户指针设置this为class对象的指针OpenGL,但是在回调中,将其强制转换为class Mouse这些类之间也没有继承关系,因此通过该指针访问任何成员变量或方法都将导致未定义的行为,这在您的情况下表示为崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用鼠标单击OPENGL绘制线条

来自分类Dev

模拟鼠标单击而无需移动光标

来自分类Dev

如何使用javascript模拟鼠标单击以及鼠标移动

来自分类Dev

OpenGL- C ++,使用鼠标单击将形状移动到单击位置

来自分类Dev

OpenGL- C ++,使用鼠标单击将形状移动到单击位置

来自分类Dev

DataGridTemplateColumn:处理鼠标单击

来自分类Dev

如何移动鼠标光标并单击?

来自分类Dev

在 Tkinter 中使用鼠标单击移动整形器

来自分类Dev

散景:用于鼠标移动或单击的CustomJS回调

来自分类Dev

Javascript:防止鼠标单击事件移动光标(防止其更改选择)

来自分类Dev

JNA / WinAPI。模拟鼠标单击会移动鼠标光标,并且不会将其返回到起始位置

来自分类Dev

鼠标单击时折叠箭头

来自分类Dev

鼠标单击触发

来自分类Dev

通过单击鼠标在PuTTY中移动光标?

来自分类Dev

代替鼠标单击,使用按键

来自分类Dev

使用 SetWindowsHookEx() 阻止 Windows 鼠标单击

来自分类Dev

鼠标光标变成“粗加号”,无法单击,但鼠标可以移动

来自分类Dev

如何使用鼠标单击显示鼠标指针位置?

来自分类Dev

Python自动执行鼠标单击而无需“使用”鼠标

来自分类Dev

如何使用鼠标单击显示鼠标指针位置?

来自分类Dev

鼠标单击(mouseFunc)时OpenGL无法关闭-glutKeyboardFunc正常吗?

来自分类Dev

用户回调中未处理的异常

来自分类Dev

在Matplotlib中,在发生鼠标单击事件时,填充鼠标单击右侧的图

来自分类Dev

用鼠标单击在 div 容器之间移动 div

来自分类Dev

SharpGL-使用选择和拾取来检测OpenGL元素上的鼠标单击

来自分类Dev

Qt keyPressEvent,“保持”和keyReleaseEvent处理按钮/鼠标单击

来自分类Dev

如何在处理中延迟/禁用鼠标单击

来自分类Dev

Qt keyPressEvent,“保持”和keyReleaseEvent处理按钮/鼠标单击

来自分类Dev

如何使用Addon SDK处理Firefox扩展中修改页面内容的鼠标单击

Related 相关文章

  1. 1

    使用鼠标单击OPENGL绘制线条

  2. 2

    模拟鼠标单击而无需移动光标

  3. 3

    如何使用javascript模拟鼠标单击以及鼠标移动

  4. 4

    OpenGL- C ++,使用鼠标单击将形状移动到单击位置

  5. 5

    OpenGL- C ++,使用鼠标单击将形状移动到单击位置

  6. 6

    DataGridTemplateColumn:处理鼠标单击

  7. 7

    如何移动鼠标光标并单击?

  8. 8

    在 Tkinter 中使用鼠标单击移动整形器

  9. 9

    散景:用于鼠标移动或单击的CustomJS回调

  10. 10

    Javascript:防止鼠标单击事件移动光标(防止其更改选择)

  11. 11

    JNA / WinAPI。模拟鼠标单击会移动鼠标光标,并且不会将其返回到起始位置

  12. 12

    鼠标单击时折叠箭头

  13. 13

    鼠标单击触发

  14. 14

    通过单击鼠标在PuTTY中移动光标?

  15. 15

    代替鼠标单击,使用按键

  16. 16

    使用 SetWindowsHookEx() 阻止 Windows 鼠标单击

  17. 17

    鼠标光标变成“粗加号”,无法单击,但鼠标可以移动

  18. 18

    如何使用鼠标单击显示鼠标指针位置?

  19. 19

    Python自动执行鼠标单击而无需“使用”鼠标

  20. 20

    如何使用鼠标单击显示鼠标指针位置?

  21. 21

    鼠标单击(mouseFunc)时OpenGL无法关闭-glutKeyboardFunc正常吗?

  22. 22

    用户回调中未处理的异常

  23. 23

    在Matplotlib中,在发生鼠标单击事件时,填充鼠标单击右侧的图

  24. 24

    用鼠标单击在 div 容器之间移动 div

  25. 25

    SharpGL-使用选择和拾取来检测OpenGL元素上的鼠标单击

  26. 26

    Qt keyPressEvent,“保持”和keyReleaseEvent处理按钮/鼠标单击

  27. 27

    如何在处理中延迟/禁用鼠标单击

  28. 28

    Qt keyPressEvent,“保持”和keyReleaseEvent处理按钮/鼠标单击

  29. 29

    如何使用Addon SDK处理Firefox扩展中修改页面内容的鼠标单击

热门标签

归档