Posté par jseb .
En réponse à la dépêche Freeglut 2.8.0 : vas-y pépé !.
Évalué à 3.
Dernière modification le 23 janvier 2012 à 00:48.
Pour une fenêtre non redimensionnable, je laisserais faire le WM. Après tout, c'est à lui de gérer les fenêtres, pas au programme de poser ce genre de limitations. Le programme devrait se cantonner à gérer les redimensionements (le callback défini par glutReshapeFunc). Cela permet de bien se comporter dans tous les cas (WM qui autorise le redimensionnement ou pas).
Si vraiment tu tiens à le faire toi-même, je vois deux solutions:
— Utiliser le «gamemode». Donc plutôt du plein écran, avec les éventuels problèmes de retour en résolution d'origine. En fenêtrage, c'est du quitte ou double, et il ne faut pas compter sur un rafraichissement propre du reste de l'écran.
— Ou bien, au moment du callback sur la fonction de reshape, utiliser glutReshapeWindow pour forcer le redimensionnement immédiat de la fenêtre aux valeurs de ton choix.
Je pense que c'est une meilleure solution, même si à mon avis ce n'est pas très propre.
J'ai fait un test pour vérifier, et ça a l'air de marcher (testé avec Freeglut 2.6 , et ça doit même aller avec les versions antérieures).
#include <stdio.h>#include <GL/glut.h>inttime_period=25;unsignedintwidth=0,height=0;voidtimer(intid_timer){glutPostRedisplay();glutTimerFunc(time_period,timer,id_timer);}voidreshape(intw,inth){glutReshapeWindow(width,height);//empêche le redimensionnementglViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1,1,0,1,-1,1);/* left, right, bottom, top, near, far */}voiddisplay(){glClearColor(.5,.5,.5,1);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glutWireTeapot(0.5);glTranslatef(-1,0,0);glutSwapBuffers();}voidkeyboard(unsignedcharc,intmousex,intmousey){mousex=mousex;mousey=mousey;//pour les warnings de gcc -Wif(c==27)exit(0);}intmain(intargc,char**argv){width=argc>1?atoi(argv[1]):640;height=argc>2?atoi(argv[2]):480;width=width<1024&&width>0?width:640;height=height<768&&height>0?height:480;glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH);//pas de glutInitWindowPosition pour un WM qui fait le tiling lui mêmeglutInitWindowSize(width,height);glutInit(&argc,argv);glutCreateWindow("test anti-redimensionnement");glutTimerFunc(time_period,timer,1/* id timer */);glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return0;}
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr
[^] # Re: Resizing
Posté par jseb . En réponse à la dépêche Freeglut 2.8.0 : vas-y pépé !. Évalué à 3. Dernière modification le 23 janvier 2012 à 00:48.
Pour une fenêtre non redimensionnable, je laisserais faire le WM. Après tout, c'est à lui de gérer les fenêtres, pas au programme de poser ce genre de limitations. Le programme devrait se cantonner à gérer les redimensionements (le callback défini par
glutReshapeFunc). Cela permet de bien se comporter dans tous les cas (WM qui autorise le redimensionnement ou pas).Si vraiment tu tiens à le faire toi-même, je vois deux solutions:
— Utiliser le «gamemode». Donc plutôt du plein écran, avec les éventuels problèmes de retour en résolution d'origine. En fenêtrage, c'est du quitte ou double, et il ne faut pas compter sur un rafraichissement propre du reste de l'écran.
— Ou bien, au moment du callback sur la fonction de reshape, utiliser
glutReshapeWindowpour forcer le redimensionnement immédiat de la fenêtre aux valeurs de ton choix.Je pense que c'est une meilleure solution, même si à mon avis ce n'est pas très propre.
J'ai fait un test pour vérifier, et ça a l'air de marcher (testé avec Freeglut 2.6 , et ça doit même aller avec les versions antérieures).
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr