2017-01-13 3 views
1

Ich benutze SDL 2.0.5 und Windows 10, um ein Fenster zu erstellen und eine Textur anzuzeigen.SDL2-Textur kann nicht mit dem SDL_PIXELFORMAT_NV12-Pixelformat erstellt werden

Alles funktioniert gut, wenn die Textur mit SDL_PIXELFORMAT_YV12 Pixelformat initialisiert wurde, aber wenn ich das Format auf SDL_PIXELFORMAT_NV12 setze, gibt SDL_CreateTexture-Funktion null zurück.

Hier ist der Code:

SDL_Window* window = SDL_CreateWindow(
    "Test", 
    SDL_WINDOWPOS_UNDEFINED, 
    SDL_WINDOWPOS_UNDEFINED, 
    width, 
    height, 
    SDL_WINDOW_FULLSCREEN_DESKTOP 
); 

SDL_Renderer* renderer = SDL_CreateRenderer(window , -1, SDL_RENDERER_SOFTWARE); 

SDL_Texture* texture = SDL_CreateTexture(
    renderer, 
    SDL_PIXELFORMAT_NV12, 
    SDL_TEXTUREACCESS_STREAMING, 
    width, 
    height 
); 

bin ich etwas fehlt?

+0

Sind Sie sicher, dass Ihre Hardware/Treiber 'SDL_PIXELFORMAT_NV12' unterstützt? – Dmitri

+0

Ich weiß es nicht, aber das Setzen von SDL_RENDERER_SOFTWARE anstelle von SDL_RENDERER_ACCELERATED gibt mir das gleiche Ergebnis. – Ben

+0

Software-Renderer [unterstützt nicht] (https://hg.libsdl.org/SDL/file/ba1da2658d76/src/render/software/SDL_render_sw.c#l84) dieses Format. Tatsächlich tun nur GL- und GLES2-Renderer. – keltar

Antwort

2

Laut keltars Kommentar erfordert SDL_PIXELFORMAT_NV12 eine Hardwarebeschleunigung.

Eine Lösung ist die Verwendung des OpenGL-Renderers, der das NV12-Pixelformat unterstützt.

Setzen Sie daher den folgenden Hinweis: SDL_SetHint (SDL_HINT_RENDER_DRIVER, "opengl"); und das Setzen des SDL_RENDERER_ACCELERATED-Flags auf die SDL_CreateRenderer-Funktion macht den Trick.

Verwandte Themen