C++ 设置窗口大小后SDL不会渲染到完整窗口

C++ 设置窗口大小后SDL不会渲染到完整窗口,c++,sdl,sdl-2,C++,Sdl,Sdl 2,以下是我使用SDL加载图像的步骤 创建窗口并使用默认大小进行渲染,例如100x100 使用IMG\u LoadTexture 查询纹理信息并获取纹理尺寸,例如800x600,然后使用SDL\u SetWindowSize将大小调整为所需大小 执行渲染 结果是,创建窗口时,SDL仅渲染到100x100区域,其他部分不渲染 如何在SDL\u SetWindowSize之后使SDL渲染为完整窗口 下面是我的示例代码 #include <iostream> #include <SDL_

以下是我使用SDL加载图像的步骤

  • 创建窗口并使用默认大小进行渲染,例如
    100x100
  • 使用
    IMG\u LoadTexture
  • 查询纹理信息并获取纹理尺寸,例如
    800x600
    ,然后使用
    SDL\u SetWindowSize
    将大小调整为所需大小
  • 执行渲染
  • 结果是,创建窗口时,SDL仅渲染到
    100x100
    区域,其他部分不渲染

    如何在
    SDL\u SetWindowSize
    之后使SDL渲染为完整窗口

    下面是我的示例代码

    #include <iostream>
    #include <SDL_image.h>
    #include "SDL.h"
    
    int main(int argc, char *argv[])
    {
    SDL_Window* sdlWindow;
    SDL_Renderer* sdlRenderer;
    SDL_CreateWindowAndRenderer(100, 100, 0, &sdlWindow, &sdlRenderer);
    
    IMG_Init(IMG_INIT_JPG);
    
    SDL_Texture* sdlTexture = IMG_LoadTexture(sdlRenderer, "test-wallpaper-800x600.jpg");
    
    Uint32 format;
    int access, w, h;
    if (SDL_QueryTexture(sdlTexture, &format, &access, &w, &h) == 0) {
        SDL_SetWindowSize(sdlWindow, w, h);
        SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
        SDL_RenderSetLogicalSize(sdlRenderer, w, h);
    }
    
    SDL_RenderClear(sdlRenderer);
    SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
    SDL_RenderPresent(sdlRenderer);
    
    SDL_Event sdlEvent;
    while (SDL_WaitEvent(&sdlEvent)) {
        if (sdlEvent.type == SDL_WINDOWEVENT
            && sdlEvent.window.event == SDL_WINDOWEVENT_CLOSE) {
            break;
        }
        if (sdlEvent.type == SDL_KEYDOWN
                && sdlEvent.key.keysym.sym == SDLK_ESCAPE) {
            break;
        }
    }
    
    SDL_DestroyRenderer(sdlRenderer);
    SDL_DestroyWindow(sdlWindow);
    return 0;
    }
    
    #包括
    #包括
    #包括“SDL.h”
    int main(int argc,char*argv[])
    {
    SDL_窗口*sdlWindow;
    SDL_渲染器*SDLRender;
    SDL_CreateWindowAndRenderer(100、100、0和sdlWindow以及sdlRenderer);
    IMG_Init(IMG_Init_JPG);
    SDL_纹理*sdlTexture=IMG_加载纹理(SDLRender,“test-wallpar-800x600.jpg”);
    Uint32格式;
    int访问,w,h;
    如果(SDL_查询结构(SDL结构、格式和访问、w和h)==0){
    SDL_设置窗口大小(sdlWindow,w,h);
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,线性);
    SDL_渲染逻辑尺寸(SDL渲染器,w,h);
    }
    SDL_渲染器(SDLRender);
    SDL_渲染副本(SDLRender、sdlTexture、NULL、NULL);
    SDL_RenderPresent(SDLRender);
    SDL_事件等级;
    while(SDL_WaitEvent(&sdlEvent)){
    if(sdlEvent.type==SDL\u WINDOWEVENT
    &&sdlEvent.window.event==SDL\u WINDOWEVENT\u CLOSE){
    打破
    }
    if(sdlEvent.type==SDL\u KEYDOWN
    &&sdlEvent.key.keysym.sym==SDLK\u转义){
    打破
    }
    }
    SDL_(SDLRender);
    SDL_窗口(sdlWindow);
    返回0;
    }
    
    您看不到更新的渲染,因为在帧循环之前只渲染一次。要解决此问题,请将渲染移动到帧循环中,如下所示:

    SDL_Event sdlEvent;
    while (SDL_WaitEvent(&sdlEvent))
    {
        if (sdlEvent.type == SDL_WINDOWEVENT
            && sdlEvent.window.event == SDL_WINDOWEVENT_CLOSE) {
            break;
        }
        if (sdlEvent.type == SDL_KEYDOWN
                && sdlEvent.key.keysym.sym == SDLK_ESCAPE) {
            break;
        }
    
        // Render here
        SDL_RenderClear(sdlRenderer);
        SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
        SDL_RenderPresent(sdlRenderer);
    }
    

    您看不到更新的渲染,因为在帧循环之前只渲染一次。要解决此问题,请将渲染移动到帧循环中,如下所示:

    SDL_Event sdlEvent;
    while (SDL_WaitEvent(&sdlEvent))
    {
        if (sdlEvent.type == SDL_WINDOWEVENT
            && sdlEvent.window.event == SDL_WINDOWEVENT_CLOSE) {
            break;
        }
        if (sdlEvent.type == SDL_KEYDOWN
                && sdlEvent.key.keysym.sym == SDLK_ESCAPE) {
            break;
        }
    
        // Render here
        SDL_RenderClear(sdlRenderer);
        SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
        SDL_RenderPresent(sdlRenderer);
    }