我有一个用C编写的SDL2游戏项目,它具有全屏功能,使用
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP)
然后允许在所有全屏幕窗口上绘图。
然而,我从直接渲染切换到窗口,然后渲染成一个纹理,然后在屏幕上渲染。
void initGFX(void) {
// (SNIP)
framebuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_UNKNOWN, SDL_TEXTUREACCESS_TARGET, WINDOW_WIDTH, WINDOW_HEIGHT); // WINDOW_WIDTH and _HEIGHT are constants, the non-fullscreen window having these sizes.
// (SNIP)
}
void renderPresent(void) {
SDL_RenderPresent(renderer);
SDL_SetRenderTarget(renderer, NULL); // renderer has "SDL_RENDERER_TARGETTEXTURE"
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, framebuffer, NULL, NULL);
SDL_RenderPresent(renderer);
SDL_SetRenderTarget(renderer, framebuffer);
}
在窗口模式下,这不会导致任何图形错误,但在全屏幕中,纹理在左上角以1:1呈现。
SDL_WINDOW_FULLSCREEN即使使用SDL_SetWindowDisplayMode使.w和.h与桌面分辨率匹配,也不允许在整个屏幕上绘图。