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

API graphiques Discussion :

Bibliothèque 2D indépendante de la plateforme


Sujet :

API graphiques

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut Bibliothèque 2D indépendante de la plateforme
    Bonjour à tous,
    Je me demande si je ne vais pas me retrouver dans le bêtisier, mais bon...
    Je suppose (c'est là que mon hypothèse est peut-être si simpliste que je vais me taper la honte) que la base de la base d'une bibliothèque 2d est la fonction qui permet de "peindre" un pixel aux coordonnées données (appelons là plotPixel()). De cette fonction dépendent toutes les autres (dessin de ligne, de formes, blending, etc).
    Je cherche donc une bibliothèque 2d où cette fonction pourrait être réécrite en fonction de mes besoins, c'est à dire en fonction des paramètres nécessaires au dessin du pixel (tel système de fenêtre et de surface de dessin pour DirectX, tel autre pour openGL, etc.).
    Autrement dit, ce que je cherche, c'est une implémentation, en C/C++, d'un maximum d'algorithmes de dessin et d'effets 2D, mais indépendante de la plate-forme utilisée dans la mesure où tout dépendrait de plotPixel().
    Est-ce que ça existe?
    Things working well, no problems. Time to upgrade.

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    je ne pense pas que tu te trouveras au bêtisier du forum , ta question n'est pas si bête que ça

    Je suppose (c'est là que mon hypothèse est peut-être si simpliste que je vais me taper la honte) que la base de la base d'une bibliothèque 2d est la fonction qui permet de "peindre" un pixel aux coordonnées données (appelons là plotPixel()). De cette fonction dépendent toutes les autres (dessin de ligne, de formes, blending, etc).
    Tu as raison sur ta première partie mais les autres fonction effet ne dépendent pas de plotPixel (si je prend exemple de la SDL).

    Si j'ai bien compris tu veux juste une bibliothèque pour les effet 2D indépendante de plotpixel ?
    Je suis pas sur mais je crois que Cairo ou openCV sont ce que tu cherche.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Merci pour ta réponse.
    Cairo peut éventuellement répondre à mon problème (à travers son système d'"image surfaces" qui manipule directement la mémoire si j'ai bien compris), mais il faut que je creuse la question, et à priori, je dirais que la solution est surdimensionnée par rapport à mes besoins.
    Mais oublions la partie effets, je me suis mal exprimé.
    Plus précisément, il me faudrait une bibliothèque implémentant des fonctions de dessin (ligne, cercle, polygone, etc.) et de remplissage en couleur unie ou en dégradé (linéaire ou radial). Je suppose que dans ce cas, mon hypothèse de départ sur la fonction "plotPixel()" est fondée.
    Si vous avez ça je suis preneur!
    Things working well, no problems. Time to upgrade.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    En fait, non, ton hypothèse de départ est fausse.
    Comme tu cites DirectX et OpenGL, je suppose que tu connais un peu comment fonctionne un gpu. Lorsque tu lances une instruction de dessin, tu envoies une commande au gpu, ce qui demande un certain temps de latence. Pour dessiner une ligne qui traverse l'écran par exemple, tu auras un appel pour chaque plotPixel() et donc autant de fois la latence. Avec l'antialiasing, tu devras également écrire dans les pixels à côté de la ligne et faire plusieurs milliers d'appels à plotPixel(). Pour une seule ligne...
    En fait, les gpu travaillent en vectoriel avec des "listes de travail" : on donne la liste des primitives (type = triangle, ligne, etc. la position, la couleur, la transparence, etc.) et les opération que l'on veut faire (transformation, blending, etc.) en une seule fois. La plupart des bibliothèques modernes de dessin utilisent l’accélération matériel et donc cette technique.
    Sans l'accélération matériel, il est quand même plus rapide de travailler avec des paquets de l'image (utilisation des mémoires tampon, vectorisation SSE) que pixel par pixel.

    Tu peux regarder du côté de Anti-Grain Geometry, un bibliothèque utilisant la rasterisation (dessin from scratch ; elle est un peu vielle mais son code est très bon) ou le moteur raster de Qt. Je crois qu'il existe une bibliothèque de dessin en C++ Template aussi mais j'ai oublié le nom

    Tu peux peut être utiliser Qt, qui peut dessiner directement (http://qt-labs.developpez.com/graphi...nce/03-raster/) ou en passant par OpenGL (http://qt-labs.developpez.com/graphi...nce/05-opengl/) et qui propose une fonction drawPoint() (http://qt.developpez.com/doc/4.7/qpainter/#drawpoint). Tu peux également t'amuser à lire la série de tutoriel Qt Graphics et performances pour mieux comprendre les problématiques de graphique

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 123
    Points : 84
    Points
    84
    Par défaut
    Merci beaucoup pour ces pistes!

    Citation Envoyé par gbdivers Voir le message
    En fait, non, ton hypothèse de départ est fausse.
    ah... et je vais me retrouver dans le bêtisier???
    Things working well, no problems. Time to upgrade.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je souhaitais juste rajouter, qu'une bibliothèque de dessin de ce genre, doit au minimum disposer de :
    • la fonction de dessin de pixel (puis, une fonction les lignes, les triangles ...)
    • une fonction pour ouvrir une fenêtre (ou zone de dessin)

    Car on peut très bien imaginer un programme qui fait des rendus uniquement dans un fichier image.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    En fait, non, ton hypothèse de départ est fausse.
    Son hypothèse n'a rien de faux.

    Seulement son hypohtèse ne prend pas en compte le fait que souvent la notion de dessin inclut dans ses bagages la notion de performance.

    Et là oui, si on prend également en compte la notion de performances, de très grandes disparités peuvent exister et c'est ce besoin en performance qui va nous contraindre d'éliminer certaines possibilités inadaptées pour l'usage qu'on veut en faire.

    On peut prendre un contre-exemple extrême: si on doit dessiner une image et que le fait que ça mette 10 secondes de plus ou de moins importe peu, alors oui, effectivement, la solution de dessiner pixel par pixel est parfaitement envisageable. Si par contre on veut faire des animations à 60 images par seconde, évidemment on ne parle plus de la même chose.

    Bref, on en revient aux fondamentaux: définir avant tout ton besoin. Et pour ça il faudrait plus de précisions sur ce que tu comptes en faire de ta lib générique.

    Et une question entraînant l'autre: s'il s'avère que ton besoin implique un impératif en terme de performances (et donc implique qu'il va falloir utiliser les optimisations des plateformes cibles), il va falloir définir quelles plateformes exactement tu veux supporter.

    My 2 cents.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  8. #8
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    D'autres que moi ont expliqué pourquoi aucune biblio 2D ne s'appuiera sur une simple fonction "plotpixel". Partant de là, ce qu'il te faut ce n'est pas une biblio dans laquelle tu pourrais réécrire plotpixel mais une biblio capable de dessiner sur une surface mémoire (image/texture) que tu pourrais ensuite envoyer à qui bon te semble. Ce que n'importe quelle biblio 2D doit pouvoir faire, de GDI à Qt en passant par Direct2D et Cairo. Il ne reste plus qu'à en choisir une et Qt est sans doute la meilleure à ce jeu (performances, portabilité, etc). Par contre il peut être difficile d'appeler Dx depuis une fenêtre Qt si celle-ci s'appuie sur OGL pour son rendu, et vice-versa.

    Tout cela étant dit, les besoins sont à mon avis mal formulés. Pourquoi pouvoir dessiner avec Dx ou OGL est-il important si le rendu est toujours fait en amont ? Est-ce qu'il ne s'agit pas simplement de pouvoir ouvrir une fenêtre et y afficher un rendu 2D sur toutes les plateformes ? Auquel cas Qt est tout indiqué.

  9. #9
    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 ben53 Voir le message
    Je suppose (c'est là que mon hypothèse est peut-être si simpliste que je vais me taper la honte) que la base de la base d'une bibliothèque 2d est la fonction qui permet de "peindre" un pixel aux coordonnées données (appelons là plotPixel()). De cette fonction dépendent toutes les autres (dessin de ligne, de formes, blending, etc).
    Je cherche donc une bibliothèque 2d où cette fonction pourrait être réécrite en fonction de mes besoins, c'est à dire en fonction des paramètres nécessaires au dessin du pixel (tel système de fenêtre et de surface de dessin pour DirectX, tel autre pour openGL, etc.).
    :
    Si tu veux dessiner au pixel près Direct X ne sera pas forcément adaptée, peut-être direct2d faut vérifier.
    Et je suppose aussi Open GL
    Il vaut mieux utiliser une lib comme CxImage
    Voulo

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2011, 17h02
  2. Bibliothèque statique indépendante
    Par Debutant75018 dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2008, 23h53
  3. Compilation multi-plateforme et bibliothèque
    Par Leeelooo dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 09/05/2007, 11h35
  4. Bibliothèque multimédia multi plateforme
    Par xilebo dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 14/09/2006, 17h08
  5. Réponses: 8
    Dernier message: 02/08/2006, 23h18

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