2017-01-13 2 views
1

J'utilise SDL 2.0.5 et Windows 10 pour créer une fenêtre et afficher une texture.Impossible de créer une texture SDL2 en utilisant le format de pixel SDL_PIXELFORMAT_NV12

Tout fonctionne correctement lorsque la texture a été initialisée avec le format de pixel SDL_PIXELFORMAT_YV12, mais lorsque je mets le format à SDL_PIXELFORMAT_NV12, la fonction SDL_CreateTexture renvoie null.

Voici le 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 
); 

Suis-je manque quelque chose?

+0

Etes-vous sûr que votre matériel/pilote prend en charge 'SDL_PIXELFORMAT_NV12'? – Dmitri

+0

Je ne sais pas, mais la définition de SDL_RENDERER_SOFTWARE à la place de SDL_RENDERER_ACCELERATED me donne le même résultat. – Ben

+0

Le rendu de logiciel [ne supporte pas] (https://hg.libsdl.org/SDL/file/ba1da2658d76/src/render/software/SDL_render_sw.c#l84) ce format. En fait, seuls les moteurs de rendu GL et GLES2 le font. – keltar

Répondre

2

Selon le commentaire de Keltar, SDL_PIXELFORMAT_NV12 nécessite une accélération matérielle.

Une solution consiste à utiliser le moteur de rendu OpenGL qui prend en charge le format de pixel NV12. Donc, en définissant le conseil comme suit: SDL_SetHint (SDL_HINT_RENDER_DRIVER, "opengl"); et la définition de l'indicateur SDL_RENDERER_ACCELERATED à la fonction SDL_CreateRenderer fait l'affaire.