2015-01-29 20 views
5

Pracuję nad projektem w C++ przy użyciu SDL (Simple Directmedia Layer), ale kiedy narysuję SDL_Texture na ekranie, jest niewyraźny, mimo że nie jest skalowany.SDL rysuje obrazy niewyraźne bez skalowania

Jak obraz jest załadowany:

SDL_Surface* loadedSurface = IMG_Load("image.png"); 
SDL_Texture* gImage = SDL_CreateTextureFromSurface(gRenderer, loadedSurface); 

Jak obraz jest rysowany na ekranie:

SDL_Rect renderQuad = { x, y, width, height }; 
SDL_RenderCopy(gRenderer, gImage , NULL, &renderQuad); 

patrz obrazek, lewa jest w programie, a prawo jest oryginalny:

enter image description here

Czy jest jakiś parametr zapomniany do ustawienia? Czy to normalne, że SDL to robi?

Używam 32-bitowego SDL 2.0 na 64-bitowym komputerze z systemem Windows 8.1.

+0

Wygląda na to, że obraz został antyaliasing. –

+0

Być może wynika to z podpowiedzi Quality Render Scale. Więcej informacji tutaj: http://forums.libsdl.org/viewtopic.php?t=9500 – fmcato

+0

Czy używasz dowolnej funkcji 'SDL_GL_ *' w dowolnym miejscu kodu? –

Odpowiedz

1

Przed wezwanie do SDL_CreateTextureFromSurface spróbować nazywając:

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); 

Według SDL Wiki powinno to wpłynąć na sposób połączenia SDL_CreateTextureFromSurface interpolacji powierzchni. "0" powinno spowodować, że najbliższy sąsiad usunie efekt rozmycia, który widzisz.

+0

Próbowałem już tego, niczego nie zmieniałem. Prawdopodobnie dlatego, że tekstury nie są skalowane. Zmiana na inną wartość również niczego nie zmienia. – Oli414

-1

Wiem, że to może być za późno, ale można osiągnąć bez rozmycia przy użyciu

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");

To działa, ja testowałem to

Powiązane problemy