c++ - SDL2 在 Fedora 21 中调整 buggy 但在 Windows 中正常

标签 c++ linux resize fedora sdl-2

我正在构建一个使用 SDL2 作为窗口管理器的跨平台 C++ OpenGL 游戏,我最近发现调整窗口大小在 linux 中有一些奇怪的问题。终端等其他窗口可以很好地调整大小。可能还值得注意的是,Fedora 位于 VMware 虚拟机中。

在 Windows 中,调整大小功能正常。

在 Fedora21 中调整大小的行为很奇怪。我能解释的最好的是,在调整窗口大小时:

  • 当鼠标静止时它总是向右拉伸(stretch)
  • 尽管只调整了边的大小,但它有时会垂直调整到屏幕顶部
  • 从底部向内调整大小直到鼠标静止不动,然后窗口开始以恒定速率向外拉伸(stretch)(同时也向右向外拉伸(stretch))
  • 只有在您松开鼠标时,窗 Eloquent 会捕捉到您离开鼠标的位置。其他时候它停留在 self 拉伸(stretch)的位置。取决于您从哪一侧拉伸(stretch)。
  • 当窗口没有快速返回到您释放它的位置时,有时窗口会移动到正确的宽度,但位于窗口向右拉伸(stretch)到的位置。

我知道它可能在我的代码中,所以我在下面提供了相关代码。如果您需要查看更多,请告诉我。它发生在一个操作系统上而不是另一个操作系统上,这很奇怪。我也在 OSX 上编译过,所以我也会看看那里发生了什么。

相关事件案例

case SDL_WINDOWEVENT_RESIZED:
    if (event.window.windowID == SDL_GetWindowID(mainWindow))
    {
        SDL_SetWindowSize(mainWindow, event.window.data1, event.window.data2);
        reshape(event.window.data1, event.window.data2);
        postRedisplay(); // Change state to redraw
    }
    break;

还有我的 reshape 代码

void reshape(int w, int h)
{
    g.width = w;
    g.height = h;
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, w, 0, h, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

最佳答案

感谢您的帮助。问题是 SDL 正在处理窗口大小调整,但后来我也在手动处理它。我不知道为什么这在 Windows 中不是问题,我猜它在 Windows 中的处理方式不同。

解决办法:去掉下面这行

SDL_SetWindowSize(window, event.window.data1, event.window.data2);

关于c++ - SDL2 在 Fedora 21 中调整 buggy 但在 Windows 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777736/

相关文章:

javascript - jQuery UI 可调整大小的火窗口调整大小事件

linux - 复制文件夹结构和仅文件名

C++ 具有多个值的队列

C++ 重载返回 void 与非 void

c# - 将参数中带有回调函数的 C/C++ 函数编码到 C#

linux - bash中的整数比较错误

iphone - 如何最好地存储 SNMP 消息并将其发送到 ios?

html - 在 Symfony 中调整 PDF 大小

resize - 如何调整 JavaFX ScrollPane 内容的大小以适合当前大小

c++ - 从文件中读取,存储到链表中,然后再次打印到文件中