2015-01-29 11 views
5

Ich arbeite an einem Projekt in C++ mit SDL (Simple Directmedia Layer), aber wenn ich ein SDL_Texture auf den Bildschirm zeichnen, ist es verschwommen, obwohl es nicht skaliert ist.SDL zeichnet Bilder unscharf ohne Skalierung

Wie wird das Bild geladen:

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

Wie wird das Bild auf den Bildschirm gezeichnet:

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

Siehe Bild links ist im Programm und rechts ist das Original:

enter image description here

Gibt es einen Parameter, den ich vergessen habe? Und ist es normal, dass SDL dies tut?

Ich verwende SDL 2.0 32-Bit auf einer Windows 8.1 64-Bit-Maschine.

+0

Sieht aus wie das Bild Anti-Aliasing ist. –

+0

Vielleicht ist es wegen der Render Scale Quality Hinweis. Weitere Informationen finden Sie hier: http://forums.libsdl.org/viewtopic.php?t=9500 – fmcato

+0

Verwenden Sie irgendwelche 'SDL_GL_ *' Funktionen irgendwo in Ihrem Code? –

Antwort

1

Vor Ihrem Anruf SDL_CreateTextureFromSurface Aufruf versuchen:

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); 

Nach SDL Wiki soll dies beeinflussen, wie SDL_CreateTextureFromSurface Anrufe, um die Oberfläche zu interpolieren. "0" sollte dazu führen, dass der nächste Nachbar den Unschärfeeffekt entfernt, den Sie sehen.

+0

Schon versucht dies, ändert nichts. Wahrscheinlich, weil die Texturen nicht skaliert sind. Das Ändern auf einen anderen Wert ändert auch nichts. – Oli414

-1

Ich weiß, das zu spät sein könnte, aber man kann keine Verwischung erreichen mit

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");

Dies funktioniert, ich habe es getestet