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ライブラリを入手すればよいでしょうか、どのライブラリをダウンロードすればよいですか?私はちょうど私のコードで何かばかげたことをしましたか?
なぜSDL_CreateWindow()を* * SDL_Init()の前に呼び出すのですか? – genpfault
ビデオカードドライバは、ベンダのサイト(NVidia、AMD)からダウンロードして最新のものですか?一般的なMSドライバでハードウェアOpenGLアクセラレーションを使用することはできません。 – VuVirt
'SDL_CreateRenderer()'の直前に 'SDL_GetNumRenderDrivers()'と 'SDL_GetRendererInfo()を使って各レンダラドライバの' SDL_RendererInfo :: name'の値をダンプするとどうなりますか? – genpfault