運行我的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;
}
}
}
當我調整了批處理文件發佈程序錯誤的控制檯窗口,它讀取Graphics renderer could not be created! SDL Error: Couldn't find matching render driver
,在我InitSDL_Environment()
功能權限指着Graphic_Renderer = SDL_CreateRenderer...
線。
正如您所看到的,該錯誤的第一位是我自己製作的,最後一位是由SDL_GetError()
生成的,所以這是SDL可以識別的問題。
我發現this forum post關於大家都建議下載OpenGL庫的基本問題。從那裏,我搜索並找到this link。該頁面上的任何鏈接似乎都不會導致我可以下載的任何內容,並且OpenGL庫下載,搜索甚至解決問題的方式逐漸變得模糊不清。那個論壇帖子畢竟是四歲的。
如果它是SDL庫的OpenGL問題,那麼我會在哪裏獲得OpenGL庫,以及我應該下載哪些庫?我只是用我的代碼做一些愚蠢的事情嗎?
爲什麼在*'SDL_Init()'之前調用'SDL_CreateWindow()'*? – genpfault
您的視頻卡驅動程序是從供應商的網站(NVidia,AMD)下載的並且是最新的?通用MS驅動程序不能使用硬件OpenGL加速。 – VuVirt
當在SDL_CreateRenderer()之前使用'SDL_GetNumRenderDrivers()'和'SDL_GetRendererInfo()'爲每個渲染驅動程序轉儲'SDL_RendererInfo :: name'值時會發生什麼? – genpfault