| Summary: | SDL_CreateRenderer sets bogus error | ||
|---|---|---|---|
| Product: | SDL | Reporter: | Raymond Jennings <shentino> |
| Component: | render | Assignee: | Ryan C. Gordon <icculus> |
| Status: | RESOLVED INVALID | QA Contact: | Sam Lantinga <slouken> |
| Severity: | normal | ||
| Priority: | P2 | CC: | icculus, philipp.wiesemann |
| Version: | 2.0.3 | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
The value returned by SDL_GetError() is undefined if the called SDL function did not return a failure (the value is not necessarily reset). See also: https://wiki.libsdl.org/SDL_GetError Yes, not a bug. --ryan. Even if you call SDL_ClearError before you make the call in question? SDL_ClearError() does not help because some functions internally try other functions which may set error messages (the description in the wiki was wrong here). |
SDL_CreateRenderer is spuriously setting the current SDL error even when it returns a valid renderer. triggering code: SDL_Window *gamewindow; SDL_Renderer *gamerenderer; unsigned short width, height; void check_error(const char *function) { const char *errmsg; errmsg = SDL_GetError(); if (strlen(errmsg)) { cout << "Error calling " << function << ": " << errmsg << endl; exit(1); } } static void setup_sdl() { width = 32 * 16; height = 32 * 12; SDL_Init(SDL_INIT_VIDEO); check_error("SDL_Init"); IMG_Init(IMG_INIT_PNG); check_error("IMG_Init"); gamewindow = SDL_CreateWindow( "RPG Studio - (whatever your game is called here)" , SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED , width, height, SDL_WINDOW_RESIZABLE); check_error("SDL_CreateWindow"); } static void create_renderer() { assert(!bubbletexture); assert(!gamerenderer); cout << "Creating renderer" << endl; check_error("NULL"); gamerenderer = SDL_CreateRenderer(gamewindow, -1, SDL_RENDERER_SOFTWARE); if (!gamerenderer) { cout << "Got NULL gamerenderer" << endl; check_error("SDL_CreateRenderer"); } else { if (strlen(SDL_GetError())) { cout << "Bogus SDL error: " << SDL_GetError(); } SDL_ClearError(); } } int main(int argc, char *argv[], char *envp[]) { setup_sdl(); create_renderer(); }