2016-11-19 2 views
-1

J'implémente un logiciel de pixellisation pour l'école et je voudrais simplement passer à SDL un buffer avec des pixels et lui indiquer le format dans lequel ils se trouvent (RGB, 24b par pixel). SDL rendrait alors cela à l'écran.Blit un tableau d'octets à l'écran en SDL

J'ai essayé d'utiliser SDL_Surface mais il semble fonctionner uniquement avec des images ou des données avec les en-têtes depuis l'échec suivant:

unsigned char pixels[BYTES_PER_PIXEL * SCREEN_WIDTH * SCREEN_HEIGHT]; 
    // ... all pixels are filled with white color 

    imageSurface = SDL_CreateRGBSurfaceFrom(pixels, 
     SCREEN_WIDTH, 
     SCREEN_HEIGHT, 
     sizeof(unsigned char) * BYTES_PER_PIXEL,  // depth 
     SCREEN_WIDTH * BYTES_PER_PIXEL,    // pitch (row length * BPP) 
     0x000000ff,         // red mask 
     0x0000ff00,         // green mask 
     0x00ff0000,         // blue mask 
     0);           // alpha mask 

L'erreur est la suivante: SDL_CreateRGBSurfaceFrom a échoué: format de pixel inconnu. Quel est le moyen le plus rapide de le faire en SDL? Y aurait-il aussi une différence de vitesse entre cette approche et le dessin d'une texture OpenGL que je rendrais ensuite sur un quad full screen?

Répondre

1

SDL_CreateRGBSurfaceFromdepth Le paramètre est the depth of the surface in bits. sizeof(unsigned char) * BYTES_PER_PIXEL est 3 (en supposant que BYTES_PER_PIXEL est 3, comme vous l'avez dit c'est 24 bpp) quand il devrait être 24; multiplier par le nombre de bits dans un octet.

Comme pour la deuxième partie - oui il y aurait. Cela dépend de beaucoup de choses, y compris le matériel CPU et GPU et le pilote GL. La meilleure façon de tester est d'écrire les deux versions. Cependant, il est très peu probable que vous verrez une grande amélioration car le dessin de quad unique à l'écran n'est pas une opération coûteuse; Les autres parties de Rasteriser devraient consommer beaucoup plus.