Мое изображение загружается правильно, но
на самом деле не отображается, если я не перетаскиваю окно консоли поверх дисплея SDL.
Отображаются только те части экрана SDL, которые перекрываются в окне консоли, поэтому я могу
по существу «рисует» изображение при использовании окна консоли и после этого оно остается.
#include "SDL.h"
class Game
private:
SDL_Surface* displayWindow_;
//Rest of class
};
Ключевая функция: (обратите внимание, GetWallpaper () возвращает действительный указатель)
void Game::Render(){
GameState* currentGameState = gameStateManager_->GetCurrentState();
if(currentGameState)
{
surface::Draw(currentGameState->GetWallpaper(), displayWindow_, 0, 0);
SDL_Flip(currentGameState->GetWallpaper());
}
return;
}
в заключение
bool surface::Draw(SDL_Surface* sourceSurface, SDL_Surface* targetSurface,
int x, int y){
if(sourceSurface == NULL || targetSurface == NULL)
return false;
SDL_Rect targetRectangle;
targetRectangle.x = x;
targetRectangle.y = y;
SDL_BlitSurface(sourceSurface, NULL, targetSurface, &targetRectangle);
return true;
}
Кто-нибудь может пролить свет на это?
Судя по вашему коду, вы переворачиваете не ту поверхность:
SDL_Flip(currentGameState->GetWallpaper());
Вы должны пройти SDL_Flip()
указатель на текущую поверхность видео (дисплея), обычно это тот, который вы получаете от вызова SDL_SetVideoMode()
, В вашем случае это, кажется, displayWindow_
,
Как в стороне — поведение, которое вы наблюдали, объясняется этой цитатой из SDL_Flip () документация:
Поверхность экрана программного обеспечения также обновляется автоматически, когда перерисовываются части окна SDL, вызванные перекрытием окон или восстановлением из пиктограммы.
Других решений пока нет …