使用 SDL 和 OpenGL 在 MacOS 上正确处理 HighDPI

问题描述 投票:0回答:1

我在 MacOS 上尝试为我的游戏 Bitfighter 进行高 DPI 渲染,结果总是看起来很糟糕,就像低分辨率游戏的放大版本。

游戏使用 SDL2 + OpenGL,我已正确启用

SDL_WINDOW_ALLOW_HIGHDPI
窗口标志,并在 Info.plist 中使其支持 HighDPI。 这一切都有效,我得到了更高分辨率的标题栏。 我使用
SDL_GL_GetDrawableSize
并且它正确返回比窗口大小大 2 倍的像素大小,但是以下重新缩放它的技术不会产生良好的结果:

  • 使用
    glViewport
    使用窗口坐标
  • 使用
    glViewport
    和可绘制坐标,然后使用
    glOrtho
    进行缩放(如 SDL 文档
    README-ios.md
    中的建议)

两者都显示像素矢量图形。 我该怎么做才能让 OpenGL 在 MacOS 高 DPI 下更好地绘制?

谢谢。

macos opengl sdl highdpi
1个回答
0
投票

我在这个主题上遇到了渲染问题。请参阅屏幕截图https://discourse.libsdl.org/t/sdl-gl-getdrawablesize-on-a-retina-mac-rendering-issue/27069

这篇文章的解决方案:

如果您自己使用 OpenGL,请确保将视口设置为与窗口的实际像素尺寸相匹配。因此,请使用从 SDL_GL_GetDrawableSize() 获得的内容。

因此,在

CreateWindow()
指定窗口的预期宽度和高度并
SDL_GL_CreateContext()
在视口中设置“真实”大小之后:

int drawableWidth, drawableHeight;
SDL_GL_GetDrawableSize(screen, &drawableWidth, &drawableHeight);
glViewport(0, 0, drawableWidth, drawableHeight);

我不断将窗口宽度和高度传递给

glOrtho()
,而不是可绘制尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.