我有一个16:9的显示屏,我想显示处于4:3模式的全屏SDL窗口。SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN)
将窗口设置在屏幕左侧并留下一个大黑酒吧在右边。
我想让窗户居中,左侧和右侧都有黑条。
SDL_SetWindowPosition(window, x, y)
似乎在全屏模式下对窗口没有影响。我可以将全屏窗口置于SDL2中心吗?
答案 0 :(得分:1)
有两种情况: (1)根据窗口大小显示渲染器和纹理。 (2)以像素显示屏幕和表面。
对于(1)这里是一个简单的解决方案,基于为渲染器设置视图端口。(没有测试,但是指南)
void SDL_SetRendererViewportRatio_4_3(SDL_Window *window,
SDL_Renderer *renderer
SDL_Rect *viewport) {
Uint8 r, g, b, a;
SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_SetRenderDrawColor(renderer, r, g, b, a);
int w, h;
SDL_GetWindowSize(window, &w, &h);
if (w * 3 > h * 4) {
viewport->w = h * 4 / 3;
viewport->h = h;
} else {
viewport->w = w;
viewport->h = w * 3 / 4;
}
viewport->x = (w - viewport->w) / 2;
viewport->y = (h - viewport->h) / 2;
SDL_RenderSetViewport(renderer, viewport);
}
请注意,只要窗口改变大小,就应该调用此函数。
对于(2)我猜你应该计算表面的坐标并自己绘制大黑条。我无法证明简单的解决方案更加困难。