2017-08-29 22 views
0

SDLプログラムを実行しているときにこのエラーが発生しました。それはうまくコンパイルされましたが、ウィンドウが短時間開いて閉じました。私は、コンソールウィンドウにプログラムエラーを投稿するバッチファイルを調整 "一致するレンダリングドライバが見つかりませんでした!" SDL_CreateRenderer()から

//Using SDL and standard IO 
#include <SDL.h> 
#include <SDL_image.h> 
#include <stdio.h> 
#include <string.h> 

// SDL Main Resources 
const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 
SDL_Window* Window = NULL; 
SDL_Texture* Canvas = NULL; 
SDL_Renderer* Graphic_Renderer = NULL; 
SDL_Event Event; 

// Initialize SDL resources 
int InitSDL_Environment(){ 
    // Window 
    Window = SDL_CreateWindow("UML Prototype", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    if(Window == NULL){ 
     printf("Window could not be created! SDL_Error: %s\n", SDL_GetError()); 
     SDL_Quit(); 
     return 0; 
    } 
    // Video Engine 
    if(SDL_Init(SDL_INIT_VIDEO) < 0){ 
     printf("SDL Video Engine could not be initialized! SDL Error: %s\n", SDL_GetError()); 
     return 0; 
    } 
    // Image Formats 
    int imgFlags = IMG_INIT_PNG; 
    if(!(IMG_Init(imgFlags) & imgFlags)){ 
     printf("SDL Image Formats could not be initialized! SDL_image Error: %s\n", IMG_GetError()); 
     return 0; 
    } 
    // Graphics Renderer 
    Graphic_Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED); 
    if(Graphic_Renderer == NULL){ 
     printf("Graphics renderer could not be created! SDL Error: %s\n", SDL_GetError()); 
     return 0; 
    } 
    SDL_SetRenderDrawColor(Graphic_Renderer, 0xFF, 0xFF, 0xFF, 0xFF); 
    // Return Success 
    return 1; 
} 

// Load image from file 
SDL_Texture* SDL_LoadTexture(char* src){ 
    SDL_Texture* texture = NULL; 
    SDL_Surface* loadData = IMG_Load(src); 
    if(!loadData){ 
     printf("Image \"%s\" could not be loaded! SDL_image ERROR: %s\n", src, IMG_GetError()); 
     return NULL; 
    } 
    texture = SDL_CreateTextureFromSurface(Graphic_Renderer, loadData); 
    if(!texture){ 
     printf("Image \"%s!\" could not be processed! SDL Error: %s\n", src, SDL_GetError()); 
    } 
    SDL_FreeSurface(loadData); 
    return texture; 
} 

int main(int argc, char* args[]) 
{ 
    // Load SDL Resources 
    if(!InitSDL_Environment()){return 1;} 
    SDL_Texture* image = SDL_LoadTexture("Duck.png"); 
    if(image == NULL){ 
     printf("Image could not be found! SDL_Error: $s\n", SDL_GetError()); 
     return 2; 
    } 
    SDL_Rect sign; 
    sign.x = 40; 
    sign.y = 31; 
    sign.w = 300; 
    sign.h = 300; 

    // Main loop 
    for(;;){ 
     // Update screen 
     SDL_RenderClear(Graphic_Renderer); 
     SDL_RenderCopy(Graphic_Renderer, image, NULL, NULL); 
     SDL_RenderPresent(Graphic_Renderer); 

     // Event handling 
     SDL_PollEvent(&Event); 
     if(Event.type == SDL_QUIT){ 
      SDL_DestroyWindow(Window); 
      SDL_Quit(); 
      return 0; 
     } 
    } 
} 

が、それは私の InitSDL_Environment()機能に Graphic_Renderer = SDL_CreateRenderer...行に右向き、 Graphics renderer could not be created! SDL Error: Couldn't find matching render driverをお読みください。

は、ここに私のコードです。

ご覧のとおり、そのエラーの最初のビットは自分で作成したもので、最後のビットはSDL_GetError()で生成されているため、SDLが認識する問題です。

私はthis forum postと誰もがOpenGLライブラリのダウンロードを提案したのとほぼ同じ基本的な問題を発見しました。そこから、私は検索し、this linkを見つけました。そのページのリンクは、ダウンロードできるものにつながっていないようで、OpenGLライブラリをダウンロードしたり、検索したり、問題が解決するかどうかは徐々にあいまいになりました。結局のところ、このフォーラムの投稿は4歳です。

SDLライブラリでOpenGLの問題が発生した場合は、どこでOpenGLライブラリを入手すればよいでしょうか、どのライブラリをダウンロードすればよいですか?私はちょうど私のコードで何かばかげたことをしましたか?

+3

なぜSDL_CreateWindow()を* * SDL_Init()の前に呼び出すのですか? – genpfault

+0

ビデオカードドライバは、ベンダのサイト(NVidia、AMD)からダウンロードして最新のものですか?一般的なMSドライバでハードウェアOpenGLアクセラレーションを使用することはできません。 – VuVirt

+0

'SDL_CreateRenderer()'の直前に 'SDL_GetNumRenderDrivers()'と 'SDL_GetRendererInfo()を使って各レンダラドライバの' SDL_RendererInfo :: name'の値をダンプするとどうなりますか? – genpfault

答えて

0

私は自分のコードで何かばかげたことをしました!もちろん< _ <

私はInitSDL_Environment()の機能を変更して動作しました。私はSDL_Init(SDL_INIT_VIDEO)部分の下にSDL_CreateWindow関数を移動しました。 SDLビデオを初期化するには、、次にを作成します。驚くばかり!

// Initialize SDL resources 
int InitSDL_Environment(){ 
    // Video Engine 
    if(SDL_Init(SDL_INIT_VIDEO) < 0){ 
     printf("SDL Video Engine could not be initialized! SDL Error: %s\n", SDL_GetError()); 
     return 0; 
    } 
    // Image Formats 
    int imgFlags = IMG_INIT_PNG; 
    if(!(IMG_Init(imgFlags) & imgFlags)){ 
     printf("SDL Image Formats could not be initialized! SDL_image Error: %s\n", IMG_GetError()); 
     return 0; 
    } 
    // Window 
    Window = SDL_CreateWindow("UML Prototype", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    if(Window == NULL){ 
     printf("Window could not be created! SDL_Error: %s\n", SDL_GetError()); 
     SDL_Quit(); 
     return 0; 
    } 
    // Graphics Renderer 
    Graphic_Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED); 
    if(Graphic_Renderer == NULL){ 
     printf("Graphics renderer could not be created! SDL Error: %s\n", SDL_GetError()); 
     return 0; 
    } 
    SDL_SetRenderDrawColor(Graphic_Renderer, 0xFF, 0xFF, 0xFF, 0xFF); 
    // Return Success 
    return 1; 
} 

三つの主要なポイントを育てコメント:

  1. SDLテクスチャは最新手動で更新する必要があるかもしれないそれらのドライバ、グラフィックスカード&を持っているコンピュータが必要です。
  2. SDLビデオウィンドウが
  3. 機能SDL_GetNumRenderDrivers()SDL_GetRendererInfo()が利用できるカードと、このエラーをトラブルシュートについての情報を見つけるために使用することができますを作成することができる前に初期化する必要があります。

ありがとうございました!これは大きな助けとなりました。

関連する問題