【问题标题】:SDL mouse range on resize调整大小时的 SDL 鼠标范围
【发布时间】:2012-08-24 20:07:20
【问题描述】:

我正在 Ubuntu 上开发 SDL OpenGL 应用程序,并注意到设置新窗口大小时鼠标范围出现问题。我的应用程序的初始大小是 600x400,鼠标范围 (x,y) 反映了这一点。但是,当用户将屏幕更改为任何其他尺寸(使用给定的预定义尺寸)时,鼠标范围仍然只反映 600x400 的屏幕尺寸,并导致鼠标定位功能出现问题。

要设置新的分辨率,我调用: SDL_SetVideoMode(Width, Height, 32, SDL_OPENGL); 据我了解,它应该处理鼠标范围调整大小,但在 Linux 中似乎没有这样做。谁能帮我解决这个问题?

注意:可能的黑客攻击似乎是退出 SDL 并使用 SDL_Init(SDL_INIT_EVERYTHING); 重新初始化

【问题讨论】:

    标签: linux sdl


    【解决方案1】:

    经过一番挖掘,我发现问题是我后来在大小更改后调用了SDL_GetMouseState(0,0),这显然干扰了鼠标范围的重新计算。但是,我已经浏览了 SDL 源代码,但我无法确定这将如何影响它。似乎有一些鼠标状态切换可能导致它。

    【讨论】:

      【解决方案2】:

      每当我调整窗口大小时,我都会执行以下操作来刷新我的视口:

      m_ParentWindow = SDL_SetVideoMode( m_width, m_height, m_depth, m_SDL_Vid_Flags );
      
      glViewport(0,0,m_width,m_height);
      
      Clear();
      

      Clear 调用的地方:

      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();
      

      【讨论】:

      • 我已经打电话给glViewport(0,0,m_width,m_height);,我打电话给glClearColor(0, 0, 0, 1);。我将尝试加载单位矩阵并调用 glClear。我不确定这是否是一个 openGL 问题,所以我没有包含任何信息。
      • 嗯,你刷新了你的观点了吗? glu透视?我也使用它,但认为没有必要修复鼠标坐标,除非您正在缩放。
      • 不进行任何缩放。基本上它是一个启动器,允许用户选择分辨率/大小,然后以该大小启动主应用程序。我觉得这不应该是 openGL 问题,但我会尝试这些建议。
      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多