Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Affichage en openGL dans les desklets ... C'est bon ou pas ?
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Affichage en openGL dans les desklets ... C'est bon ou pas ?
Page : 1 2 3 4
nochka85 Français 79 nochka85 [Read]
04 March 2009 à 13:12

Tofe, Tuesday 24 February 2009 à 09:38


Subscription date : 09 February 2008
Messages : 921
Fabounet, voici où j'en suis pour la vue carroussel: je me suis attaqué à la vue carroussel "non 3D" dans un premier temps. Pour la vue "3D" (si on la garde), j'ai quelques idées. Ceci dit je préfèrerais un angle pour positionner l'axe de rotation, car un booleen oui/non ça me semble un peu brutal. Mais bref.

Donc en fait, ça marche presque: j'ai les labels (pour weather, par exemple), et pour mail j'obtiens même l'icône centrale. Par contre pour weather j'arrive pas à avoir l'icone centrale; j'ai l'impression que la texture n'est pas à jour, ou un truc du genre. Pareil pour les icones "secondaires". Bref, je vais creuser.

nochka85, Tuesday 24 February 2009 à 12:43


Subscription date : 29 November 2007
Messages : 7408
oui je peux rajouter la boucle rapide pour les desklets, mais n'en abusez pas, pensez aux portables


En fait, le truc ce serait d'utiliser la boucle rapide lors du survol ou de certaines "animations" seulement ... et dès que c'est fini, le desklet repasserait en boucle lente

D'ailleurs, je ne comprends pas trop où est-ce que l'on gère le survol de la souris dans les applets -> Exemple, je voudrais simplement voir un cube "arrêté" ou même un simple carré ... et lorsque je survole le desklet, le cube se mettrait à tourner

Tofe, Tuesday 24 February 2009 à 13:57


Subscription date : 09 February 2008
Messages : 921
Je crois qu'il y a une notification "quelquechose_HOVER", à laquelle on peut s'enregistrer. Il y a un truc comme ça dans Animation-Icons

nochka85, Tuesday 24 February 2009 à 21:10


Subscription date : 29 November 2007
Messages : 7408
Fab, çà marche pour les desklet ce "quelquechose_HOVER" ? <- T'aurais pas le nom exact ?

.... Mais du coup , dans Init, on le mets où ? ... Parce qu'il y a une section pour l'INIT, une pour le STOP, et une pour le RELOAD ... mais y'a rien pour le "SURVOL" ... où alors faut pas le gérer comme çà ?

fabounet, Tuesday 24 February 2009 à 21:10


Subscription date : 30 November 2007
Messages : 17118
regarde dans cairo-dock-notifications.h, elles sont toutes là.
tu as le signal d'entrée, utilisé par show-mouse par exemple, je pense que tu peux t'en inspirer fortement.

Tofe, Tuesday 24 February 2009 à 23:15


Subscription date : 09 February 2008
Messages : 921
Bon, ça y est, j'ai les icones en mode "non 3D"

Reste le mode "3D". Mais cela a-t-il un sens dans un cairo-dock tout OpenGL ?

fabounet, Wednesday 25 February 2009 à 12:07


Subscription date : 30 November 2007
Messages : 17118
le mode 3D c'est celui avec le plan, le mode non 3D c'est juste les icônes en rond, mais en fait ils sont tous 2 en 2D (le plan n'est qu'un trapèze )
donc si tu veux faire simple, tu peux faire pareil, sinon tu peux tenter de faire un vrai plan vu de dessus (en fait c'est peut-être même ça le plus simple)

Tofe, Wednesday 25 February 2009 à 13:40


Subscription date : 09 February 2008
Messages : 921
Oui, je pensais effectivement faire un vrai plan qui plonge en profondeur, avec des icones qui tournent parallèlement à ce plan. Donc il y a juste à rajouter un plan, remplacer l'axe Y par l'axe Z, et voilà ! Ensuite on rajoutera du brouillard, de la lumière, de la pluie

fabounet, Wednesday 25 February 2009 à 23:24


Subscription date : 30 November 2007
Messages : 17118

mais + 1000 !
du coup c'est en fait la vue 2D qui devient superflue

pour l'inclinaison je me demande si ça s'intègrerait pas directement avec la rotation du desklet (donc que tu n'aurais même pas à la gérer)

nochka85, Saturday 28 February 2009 à 14:48


Subscription date : 29 November 2007
Messages : 7408
Fab, çà marche pour les desklet ce "quelquechose_HOVER" ? <- T'aurais pas le nom exact ?

.... Mais du coup , dans Init, on le mets où ? ... Parce qu'il y a une section pour l'INIT, une pour le STOP, et une pour le RELOAD ... mais y'a rien pour le "SURVOL" ... où alors faut pas le gérer comme çà ?


fabounet, Mardi 24 Février 2009 à 21:10     

regarde dans cairo-dock-notifications.h, elles sont toutes là.
tu as le signal d'entrée, utilisé par show-mouse par exemple, je pense que tu peux t'en inspirer fortement.


J'ai regarder dans cairo-dock-notifications.h, et j'ai bien trouver CAIRO_DOCK_ENTER_DESKLET, qui semble être ce que je recherche, mais je comprends vraiment pas ce que je peux en faire !?

Il faut que je m'abonne à cette notification pour pouvoir avoir une action lors du survol, mais ensuite ? ... je ne trouve pas de de CD_APPLET_ON_ENTER_DESKLET ou d'équivalent pour mettre dans mon applet-notifications.c ?

... de plus, ensuite, comment je peux faire pour "switcher" du rendu lent au rendu rapide ? -> En effet, actuellement, dans mon CD_APPLET_INIT_BEGIN , j'ai çà :
cairo_dock_register_notification (CAIRO_DOCK_UPDATE_ICON_SLOW, (CairoDockNotificationFunc) cd_opengl_update_icon_slow, CAIRO_DOCK_RUN_FIRST, myApplet);

(D'ailleurs, est-ce que je dois changer mon CAIRO_DOCK_UPDATE_ICON_SLOW en CAIRO_DOCK_UPDATE_DESKLET_SLOW ?? ... c'est quoi la différence ?)

... et je souhaiterais basculer vers :

cairo_dock_register_notification (CAIRO_DOCK_UPDATE_ICON, (CairoDockNotificationFunc) cd_opengl_update_icon_fast, CAIRO_DOCK_RUN_FIRST, myApplet);

lors du survol ? .... Bref, je mets çà où ?

... Y'a vraiment des trucs que je ne trouvent pas clair du tout dans l'écriture des applets

fabounet, Monday 02 March 2009 à 10:47


Subscription date : 30 November 2007
Messages : 17118
oki je ne dis pas que c'est limpide hein justement j'ai bien besoin de critiques en ce sens pour rendre la chose plus accessible.
en attendant, pour le enter_desklet, regarde dans show-mouse, il l'utilise.
pour le CAIRO_DOCK_UPDATE_ICON je l'ai intégré déjà, je crois.

nochka85, Monday 02 March 2009 à 12:25


Subscription date : 29 November 2007
Messages : 7408
mais du coup, c'est CAIRO_DOCK_UPDATE_ICON ou CAIRO_DOCK_UPDATE_DESKLET qu'il faut utiliser ?

fabounet, Monday 02 March 2009 à 16:13


Subscription date : 30 November 2007
Messages : 17118
CAIRO_DOCK_UPDATE_DESKLET = maj du desklet (genre faire tourner d'1° les paillettes de show-mouse)
CAIRO_DOCK_UPDATE_DOCK = idem pour les docks
CAIRO_DOCK_UPDATE_ICON = maj de l'icone (la plupart du temps ça signifie mettre à jour la surface/texture)

ici tu ne dessine pas le container, mais l'icône, et c'est la vue qui la placera.
et au passage ce n'est pas la vue qui la dessinera mais elle sera dessinée par quelqu'un qui se sera abonné au RENDER_ICON (genre Animated Icons)

bon allez je me lance dans l'écriture de quelques macros utiles

PS : en fait je ne sais pas très bien ce que vous voulez faire, ça serait peut-être bien de mettre ça à plat

nochka85, Tuesday 03 March 2009 à 12:51


Subscription date : 29 November 2007
Messages : 7408
PS : en fait je ne sais pas très bien ce que vous voulez faire, ça serait peut-être bien de mettre ça à plat


J'ai vu que tu avais commité une "API Opengl(encours)" ... donc, je pense que tu es déjà en train de tout mettre à plat

Bref, j'ai repéré un soucis hier :

Comme tu as inversé la matrice (Y+ vers le bas au lieu de vers le haut) afin d'être homogène avec cairo notamment, il y a un soucis avec le loader d'image ... En effet, pour charger mes textures, j'utilise çà (vu avec Tofe à la page précédente ... et je l'ai un peu modifié depuis):

Gluint cd_opengl_load_texture (CairoDockModuleInstance *myApplet, gchar *texture)
{
gchar *cImagePath;

if (CD_APPLET_MY_CONTAINER_IS_OPENGL)
{
cImagePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, texture);
myData.iPicture = cairo_dock_create_texture_from_image(cImagePath);
}
else
{
myData.iPicture = 0;
}

cd_debug( "cd_opengl_test : myData.iPicture = %d", myData.iPicture );

return myData.iPicture;
}


et je charge tout simplement ma texture en faisant par exemple :

texture1 = cd_opengl_load_texture (myApplet, "texture1.png");
texture2 = cd_opengl_load_texture (myApplet, "texture2.png");


Le soucis, c'est que mes textures sont à l'envers par rapport à la nouvelle matrice.

Je peux sans problème les remettre dans le bon sens lors du plaquage sur mes faces, mais le soucis c'est que du coup, on "sort" VRAIMENT du standard openGL (et on est obligé de plaquer les textures dans le sens horaires ... ce qui est déconseillé )... ce qui est vraiment dommage vu que du coup, la récupération de code existant en dehors du dock sera beaucoup plus chiante !! <- Exemple : Tous les bouts de code que j'ai fait lors de mes bidouillages avec la SDL sont à refaire ....

Bref, il y a une incohérence entre la matrice "inversée" et les textures qui ne le sont pas

Donc, y'aurait il moyen d'intégrer un "loader d'image" qui retourne automatiquement ces dernières ?

fabounet, Tuesday 03 March 2009 à 14:32


Subscription date : 30 November 2007
Messages : 17118
les textures sont inversée en Y

donc pour les plaquer sur le container on inverse le sens de dessin du carré (fonction cairo_dock_apply_texture par exemple)

mais pour un pbuffer, on copie le dessin du buffer dans une texture, et ça ça n'inverse pas la texture => la texture est à l'endroit !
donc quand on la plaque sur le dock elle est à l'envers !

d'où le retournement lors du dessin sur le pbuffer. du coup, dessiner dans le pbuffer ou sur un container revient au même.

alors après c'est sûr que ça inverse tout ... quand on dessine la texture sur autre chose qu'un carré faut penser à inverser les Y ...
sinon faut se palucher l'inversion des pixels lors du chargement de la texture, ok c'est faisable mais j'ai peur que ça pompe pas mal de CPU.

en plus j'ai déjà tout fait comme ça <--- ok là c'est mauvais comme excuse.

pour l'API, regarde dans clock et slider, j'ai juste fait des macros qui encapsulent tout, je pense que maintenant c'est plus simple, mais n'hésite pas à critiquer

nochka85, Tuesday 03 March 2009 à 18:48


Subscription date : 29 November 2007
Messages : 7408
EDIT: J'ai rayé tout ce qu'il n'y a plus besoin de lire ... voir l'EDIT2

J'ai pas tout compris ... mais il n'empêche que je trouve çà "super lourd" à gérer en l'état

pour l'API, regarde dans clock et slider, j'ai juste fait des macros qui encapsulent tout, je pense que maintenant c'est plus simple, mais n'hésite pas à critiquer


Concernant les macros , j'ai jeté un coup d'oeil ... et effectivement, cela simplifie énormément le code ... mais (car il y a un mais), étant en plein apprentissage de l'openGL, je préfère autant que possible (dans un premier temps ) "me taper" les lignes de codes afin de bien comprendre ce que je fais ... même si du coup j'alourdis mon code.

Bref, à mon avis, le plus "important" est surtout d'avoir un truc ( une macro ?) qui remet tout dans le bon sens <- C'est indispensable si on veut faire un peu de portage

Ensuite, les macros indispensables concernent surtout les loaders d'images (qui chargent l'image dans le même sens que l'openGL traditionnel vis à vis de la matrice), un loader de .obj , ou encore une macro d'affichage du texte en opengl

... D'ailleurs, pour le loader d'image, y'a pas tout simplement moyen de gérer çà avec un plaquage de la texture mal orientée dans un pbuffer (en la réorientant bien) + de récupérer le contenu de ce pbuffer pour générer la nouvelle texture "correctement orientée" ? ... le tout utilisable avec une simple fonction du type matexture_bien_orientee = cd_load_texture_good_orientation (myApplet, "texture.png");


EDIT : en plus, avec une nouvelle fonction de ce type, cela permettrait de pouvoir conserver le code de ce qui est déjà écrit en l'état, et de pouvoir utiliser cette nouvelle fonction QUE si on le souhaite

EDIT2 : Bon, en fait, après mûre reflexion (et quelques essais), cela marche pas trop mal avec cairo_dock_apply_texture(maTexture) ... par contre, tu pourais pas juste rajouter un cairo_dock_apply_current_texture(void) qui ferait la même chose mais sans "embarquer" la texture en question ?

en gros :
glBindTexture(GL_TEXTURE_2D, maTexture);
cairo_dock_apply_current_texture();


ferait la même chose que :
cairo_dock_apply_texture(maTexture);


<- Je demande çà car j'ai un cas ou je voulais rappeler la même transformation x fois mais en utilisant une texture différente ... et donc, j'ai tout regroupé dans une fonction et je fais mon glBindTexture AVANT d'appeler cette fonction (<- En attendant je me suis créé une displaylist)

... Bref, pour le loader d'image, c'est bon

Reste plus qu'un loader de texte ... genre :

void stroke_output(GLfloat x,GLfloat y, double scale, char *format,...)
{
    va_list args;
    gchar buffer[200],*p;
    va_start(args,format);
    vsprintf(buffer,format,args);
    va_end(args);
    glPushMatrix();
    glTranslatef(x,y,0);
    
    glScalef(scale,scale,0);
    
    for ( p = buffer ; *p ; p++ )
    glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,*p);
    glPopMatrix();
    g_free( buffer );
}


... qui utilise GLUT <- D'ailleurs, je n'arrive pas à l'intégrer (voir ici : http://www.glx-dock.org/bg_topic.php?t=2468 )

... et sujet de Glut, il n'y aurait pas moyen de remplacer #include <GL/gl.h> + #include <GL/glu.h> par : #include <GL/glut.h> (car glut embarque déjà gl.h et glu.h entre autres + d'autres choses assez indispensables .... dont les textes )

fabounet, Wednesday 04 March 2009 à 10:17


Subscription date : 30 November 2007
Messages : 17118
mais glut c'est tout un framework à la GTK, il a même sa propre boucle d'évènements, pas trop envie d'embarquer un truc aussi gros.

"me taper" les lignes de codes => le but des macros c'est de cacher l'architecture interne du dock, pas forcément très intéressant. le code interessant est entre les BEGIN et END, pas tellement dedans ou en-dehors.
et puis niveau maintenance, c'est le bonheur car il y'a déjà pas mal d'applet
pour les trucs utiles en opengl, il y'a les fonctions dans draw-opengl.h
pour les macros utiles, il y'en a dans applet-facility.h

je suis ok pour rajouter n'importe quelle fonction afin de se faire une petite bibliothèque utile à toutes les applets
si on voit que le coup de l'inversion est vraiment trop lourd, on pourra toujours à un moment donné re-inverser, quitte à alourdir le chargement des textures.
il y'a aussi le coup de la pré-multiplication par le alpha qui me dérange.

nochka85, Wednesday 04 March 2009 à 12:34


Subscription date : 29 November 2007
Messages : 7408
mais glut c'est tout un framework à la GTK, il a même sa propre boucle d'évènements, pas trop envie d'embarquer un truc aussi gros.


Yep, mais lui embarque directement des fonts 3D pour l'opengl ... pas GTK. Et j'ai eu beau chercher, j'ai rien trouvé perso pour faire un affichage de texte en 3D sans glut

fabounet, Wednesday 04 March 2009 à 13:09


Subscription date : 30 November 2007
Messages : 17118
hmm
y'a une fonction dans gtkglext relative à Pango (donc au fonts)
je sais pas comment l'utiliser mais ça me plairait d'avantage.
je vais fureter un peu

nochka85, Wednesday 04 March 2009 à 13:12


Subscription date : 29 November 2007
Messages : 7408
Tu nous tiens au courant ?

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Affichage en openGL dans les desklets ... C'est bon ou pas ?
Page : 1 2 3 4
nochka85 Français 79 nochka85 [Read]
04 March 2009 à 13:12


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Affichage en openGL dans les desklets ... C'est bon ou pas ? Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.