2016-12-03 9 views
1

다음은 SDL을 사용하여 이미지를로드하는 단계입니다.SDL이 창 크기를 설정 한 후 전체 창에 렌더링되지 않습니다.

  1. 필요한 크기로 크기를 조정 SDL_SetWindowSize를 사용 후, 예를 들어 800x600IMG_LoadTexture
  2. 쿼리 텍스처 정보와 이미지에서 텍스처를 생성하고 텍스처 치수를 얻을, 예를 들어 100x100
  3. 을 창을 만들고 기본 크기로 렌더링
  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; 
} 

답변

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