gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:53 25 4
gpt4 key购买 nike

我正在构建一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com