IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

difference entre SDL_HWSURFACE et SDL_SWSURFACE


Sujet :

SDL

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut difference entre SDL_HWSURFACE et SDL_SWSURFACE
    Bonjour à tous,

    j'ai fais plusieurs applis basées sur la SDL. Toutes sont en 2D (je n'utilise donc pas OpenGL), et je n'utilise que des SDL_Surface pour l'affichage.

    Sur chacune de ces applis, j'ai testé s'il y avait des différences entre l'utilisation de la mémoire video (SDL_HWSURFACE) ou l'utilisation de la memoire "logicielle" (SDL_SWSURFACE), via la fonciton SDL_SetVideoMode, et je ne vois jamais de différence.

    Savez-vous donc, concrètement, quelles sont les différences? Dans quels cas l'un est-il préférable à l'autre? Y a-t-il des estuces d'utilisation pour l'un ou pour l'autre?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    d'après la doc wiki, SDL_HWSURFACE met la surface dans la mémoire de la carte graphique, et donc, si toutes les surfaces sont des HWSURFACES, les blits seront plus rapides.
    Au contraire, les SDL_SWSURFACE mettent les surfaces dans la mémoire logicielle, la RAM donc (enfin je pense), et ainsi quand on accède aux propriétés de la surface c'est plus rapide, donc à utiliser pour les manipulations pixels à pixels.

    Enfin, c'est ce qui est dit dans le wiki, après les surfaces ne peuvent pas tout le temps être mises en SDL_HWSURFACE, d'ailleurs je pense (mais je ne suis pas sûr) que tu peux tester si une surface est en SDL_HWSURFACE en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    surface->flags & SDL_HWSURFACE
    et alors tu peux voir si l'ordi a réussi à la mettre en SDL_HW..

    Encore une fois, tout ça c'est ce que je crois avoir compris de la doc, mieux vaut vérifier ^^

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Vi, c'est ce que j'avais compris également. Mais ça ne dis pas vraiment dans quel cas l'un est meilleur que l'autre. Et les tests que j'ai fais ne font pas ressortir de différence entre les deux.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,
    En fait j'ai testé les attributs de mes surfaces et pas moyen d'en mettre une en HWSURFACE, je sais pas si c'est le cas pour toi?

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 378
    Points
    20 378
    Par défaut
    Citation Envoyé par r0d Voir le message
    Sur chacune de ces applis, j'ai testé s'il y avait des différences entre l'utilisation de la mémoire video (SDL_HWSURFACE) ou l'utilisation de la memoire "logicielle" (SDL_SWSURFACE), via la fonciton SDL_SetVideoMode, et je ne vois jamais de différence.
    La réponse va être très simple : SDL sous Windows c'est DirectDraw ; si t crées une SDL_SWSURFACE c'est que le système n'a pas de carte accélératrice ou bien n'a pas assez de mémoire vidéo ( VRAM ) .
    Dans le cas d'une accélération matérielle c'est l'inverse.
    Direct X si l'accélération matérielle n'est pas dispo, fournit une abstraction logicielle ( Hardware Emulation Layer).
    Si c'est pour Linux il faut voir comment c'est géré avec X-Windows...
    Prendre les sources de SDL

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Salut,
    En fait j'ai testé les attributs de mes surfaces et pas moyen d'en mettre une en HWSURFACE, je sais pas si c'est le cas pour toi?
    Hmm... comment on fait pour mettre une surface en HWSURFACE?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  7. #7
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Bon allez je fais encore un déterrage étant donné que je bosse sur la SDL en ce moment je vais essayer de répondre à la question, si des newbies passent ils auront un indice de réponse
    Et bien enfaite sous Windows tu peux pas, comme l'a dit Mat.M la SDL sous windows utilise DirectDraw, de la lib directx, directdraw c'est très vieux et c'était réellement utilisé jusqu'à dx7 et il me semble que sa stockait les surfaces directement dans la ram et quand on demandé l'affichage ça balancé a chaque fois les données de la ram à la carte graphique ce qui sollicitait bien le petit port AGP enfin bref c'est bien lent ^^ il aurait fallu que les dev de la librairie DirectX modifie les différentes fonctions DirectDraw pour l'adapter mais ça n'a pas été fait et c'est vrai que çe n'est pas vraiment utile sauf pour les devs SDL sacrifiable xD

  8. #8
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    En fait le problème a été abordé depuis et apparemment il y a une solution:

    http://www.developpez.net/forums/d60...ero-video_mem/

  9. #9
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    si des newbies passent ils auront un indice de réponse
    aïe...
    désolé, mais je vais corriger un peu celà, ca serait domage de mettre le 'newbie' sur une fausse piste...
    Citation Envoyé par oxyde356 Voir le message
    Et bien enfaite sous Windows tu peux pas
    Et bien si, en utilisant le mode directX. (c-a-d en demandand a sdl d'utiliser le driver directX)

    Depuis la version 1.2.10 SDL utilise windib par défaut au lieu de directX.
    tout simplement car l'utilisation du canal alpha est tres lent sous sdl+directx (est-ce la faute a directdraw ou bien a sdl qui implemente mal?) et comme on trouve du canal alpha dans 50% des tuto SDL, j'imagine que ca rendait pas un bon service aux prog SDL.
    donc SDL est passé à un drivers plus basique : windib qui lui ne permet pas de stocker les ressources en memoire.

    Mais libre à toi de changer le driver que ton prog utilise, ca se fait un UNE ligne de code dans ton programme : SDL_putenv("SDL_VIDEODRIVER=directx")
    mais assure toi ne NE PAS utiliser de canal alpha (ne pas confrondre avec une couleur de transparence qui ne pose pas de probleme a directdraw lui)
    voilà, c'est simple.

    canal alpha => utilisation du driver par defaut => pas HW surface
    pas de canal alpha => possibilité d'utiliser directx => HW possible.

    donc OUI sous windows, on peu avoir des surfaces en memoire.

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. La difference entre XSL et XSLT?
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2003, 15h14
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo