2016-12-03 12 views
1

ここではSDLを使用してイメージをロードする手順を示します。設定したウィンドウサイズの後にSDLがフルウィンドウにレンダリングされない

  1. 例えば100x100
  2. が必要なサイズ
  3. にリサイズする SDL_SetWindowSizeを使用し、その後、 800x600例えば、 IMG_LoadTexture
  4. クエリテクスチャ情報と画像からテクスチャを作成し、テクスチャの寸法を取得し、ウィンドウを作成し、デフォルトのサイズでレンダリング
  5. レンダリングを実行する

この結果、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); 
} 
関連する問題