2015-11-05 4 views
-1

Хорошо, из того, что я исследовал, кажется, что ошибка Invalid Renderer применяется к различным случаям, и я теряюсь от того, почему мой код ее создает. я сузил его до определенной области кодаОшибка SDL: недопустимый рендеринг на SDL_CreateTextureFromSurface

//If existing texture is there, free's and sets to NULL. Along with iWidth & iHeight = 0; 
freetexture(); 

//final image texture 
SDL_Texture* niTexture = NULL; 

//Loads image at specified path 
SDL_Surface* loadedSurface = IMG_Load(path.c_str()); 
if (loadedSurface == NULL) 
{ 
    printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError()); 
} 
else 
{ 
    printf("SpriteSheet :: Loaded\n"); 
    Init mkey; 
    //Color key DOUBLE CHECK IF ERROR CHANGE TO ORIGINAL 0, 0xFF, 0xFF 
    SDL_SetColorKey(loadedSurface, SDL_TRUE, SDL_MapRGB(loadedSurface->format, 50, 96, 166)); 

    //create texture from surface pixels 
    niTexture = SDL_CreateTextureFromSurface(mkey.Renderer, loadedSurface); 
    if (niTexture == NULL) 
    { 
     printf("Unable to create texture from %s! SDL Error: %s\n", path.c_str(), SDL_GetError()); 
    } 

В частности на линии,

niTexture = SDL_CreateTextureFromSurface(mkey.Renderer, loadedSurface); 

вызывает SDL возвращать Invalid ошибки рендерера. В моем классе инициализации рендеринг отлично инициализируется, только когда я пытаюсь использовать его для загрузки изображения, я получаю ошибку Invalid Renderer. Любая помощь по устранению этой ошибки приветствуется.

Edit :: Вот некоторый код из Init класса, относящийся к визуализатору,

printf("Linear Texture Filtering :: Enabled\n"); 
     //Create Window 
     Window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, sw, sh, SDL_WINDOW_SHOWN); 
     if (Window == NULL) 
     { 
      printf("Window failed to be created\n"); 
      SDLSuccess = false; 
     } 
     else 
     { 
      printf("Window :: Created\n"); 
      //Create VYNC'd renderer for the window 
      Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); 
      if (Renderer == NULL) 
      { 
       printf("Renderer failed to be created\n"); 
       SDLSuccess = false; 

      } 

Надеется, что это помогает найти проблему.

+1

Можете ли вы показать код из класса Init? –

+0

Добавлен код Init для уточнения. – Failbound

ответ

1

Похоже, что ваш Renderer не инициализирован, если только вы не указали код в конструкторе вашего класса Init.

У вас уже есть экземпляр Init где-то в вашем коде, что вы имеете в виду, ссылаясь на ваш метод текстуры? Прежде чем пытаться его использовать, проверьте значение вашего рендерера, например:

if (mkey.Renderer) { 
    niTexture = SDL_CreateTextureFromSurface(mkey.Renderer, loadedSurface); 
    if (niTexture == NULL) 
    { 
     printf("Unable to create texture from %s! SDL Error: %s\n", path.c_str(), SDL_GetError()); 
    } 
} else { 
    printf("Renderer is not initialized"); 
} 
+0

Это работало над исправлением недопустимой части Renderer, я думал, так как я уже установил рендеринг для инициализации в моем основном, это сработало бы, если бы я ссылался на него в другом классе. Теперь я получаю еще одну ошибку относительно фактического использования функции для отображения изображения. Я сделаю еще несколько исследований и посмотрю, смогу ли я это исправить. – Failbound

 Смежные вопросы

  • Нет связанных вопросов^_^