【问题标题】:SDL not render to the full window after set window size设置窗口大小后,SDL 不渲染到整个窗口
【发布时间】:2016-12-03 09:23:42
【问题描述】:

这是我使用 SDL 加载图像的步骤。

  1. 创建窗口并以默认大小渲染,例如100x100
  2. 使用IMG_LoadTexture从图像创建纹理
  3. 查询纹理信息并获取纹理尺寸,例如800x600,然后使用SDL_SetWindowSize调整到所需大小
  4. 执行渲染

结果是SDL在创建窗口时只渲染到100x100区域,其他部分不渲染。

SDL_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;
}

【问题讨论】:

    标签: c++ sdl sdl-2


    【解决方案1】:

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

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多