[C] OpenGL en FullScreen

OpenGL en FullScreen [C] - Programmation

Marsh Posté le 23-10-2001 à 23:17:48    

:hello: Comment on fait sous win32?

 

[edtdd]--Message édité par sombresonge--[/edtdd]

Reply

Marsh Posté le 23-10-2001 à 23:17:48   

Reply

Marsh Posté le 23-10-2001 à 23:36:51    

de mémoire, qqchose comme ChangeDisplaySettings() ...

Reply

Marsh Posté le 24-10-2001 à 00:02:12    

Le + simple, ouvre une fenetre en full screen avec DirectDraw, et utilise OpenGL dedans.
 
Y a pas de fonction OpenGL pour ouvrir une fenetre. Ou alors faut utiliser glut, mais c'est vite limité quand on veut faire un jeu vidéo  :D

Reply

Marsh Posté le 24-10-2001 à 00:15:18    

tgrx a écrit a écrit :

Le + simple, ouvre une fenetre en full screen avec DirectDraw, et utilise OpenGL dedans.
 
Y a pas de fonction OpenGL pour ouvrir une fenetre. Ou alors faut utiliser glut, mais c'est vite limité quand on veut faire un jeu vidéo  :D  




 
Si je voulais faire du DirectX je ferais du DirectX!
 
Si on peut ouvrir une fenetre en OpenGL sans glut (je sais je l'ai fait) il suffit de passer par les fonction de l'API ou par les MFC. Le problème c de passer la fenêtre en FullScreen mais je crois effectivement que ChangeDisplaySettings() est un début...

Reply

Marsh Posté le 24-10-2001 à 00:47:17    

ok, moi je te parlais juste d'une fonction simple ;)

Reply

Marsh Posté le 24-10-2001 à 00:56:06    

tgrx a écrit a écrit :

ok, moi je te parlais juste d'une fonction simple ;)  




 
Parceque tu peut le faire avec directdraw?
 
simple:
 
DirecDrawCreateEX(NULL,(LPVOID*)&lpDD,IID_IDirectDraw7,NULL);
lpDD->SetCooperativeLevel(hWnd,DDSCL_NORMAL);
...
lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
...
 
Si c ça que tu appelle Simple! (sans compter la tonne de variable global etc.)

Reply

Marsh Posté le 24-10-2001 à 01:06:19    

mouais l'idée était peut-être pas excellente ;)  
 
sinon tu peux toujours faire un faux fullscreen en stretchant une fenetre pour qu'elle ait la meme taille que la résolution de l'écran.
 
Tu perds 5% de perfs environ (paske windows continue à afficher son bordel derriere meme si on le voit pas), mais c'est pas dramatique.
Pour le full screen total, je crains cependant qu'il ne faille utiliser directx sous peine de manipulation assez lourde de l'API :(

Reply

Marsh Posté le 24-10-2001 à 01:11:32    

tgrx a écrit a écrit :

 
Pour le full screen total, je crains cependant qu'il ne faille utiliser directx sous peine de manipulation assez lourde de l'API :(  




 
C pas trop grave ça. Je vais essayé de le faire demain avec le:
ChangeDisplaySettings(...);

Reply

Marsh Posté le 24-10-2001 à 02:54:31    

J'y arrive PAS! Voilà ce que je fais et ça passe pas en plein écran:
 
void InitGL(HDC* dc, HGLRC* rc, HWND hGlWnd)
{
 
 PIXELFORMATDESCRIPTOR pfd =
 {
  sizeof(PIXELFORMATDESCRIPTOR),
   1,
   PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER,
   PFD_TYPE_RGBA,
   32,
   0, 0, 0, 0, 0, 0,
   0, 0,
   0, 0, 0, 0, 0,
   32,
   0,
   0,
   0,
   0,
   0,
   0,
   0
 };
 int PixelFormat;
 
 DEVMODE devmode;  
 
 ZeroMemory(&devmode,sizeof(DEVMODE));
 devmode.dmSize=sizeof(DEVMODE);
 devmode.dmBitsPerPel=32;
 devmode.dmPaperWidth=640;
 devmode.dmPelsHeight=480;
 devmode.dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
 
 if(ChangeDisplaySettings(&devmode,CDS_FULLSCREEN)
!=DISP_CHANGE_SUCCESSFUL)
  MessageBox(hGlWnd,"Impossible de Passer en FullScreen","Erreur",MB_OK);
 
 *dc=GetDC(hGlWnd);
 
 PixelFormat = ChoosePixelFormat(*dc, &pfd);
 if(!PixelFormat)
 {
  MessageBox( hGlWnd,
     "Mode Graphique Non supporté",
     "Problème",
     MB_ICONERROR | MB_OK );
  exit(1);
 }
 
 if(!SetPixelFormat(*dc, PixelFormat,&pfd))
 {
  MessageBox( hGlWnd,
     "Mode graphique Non supporté",
     "Problème",
     MB_ICONERROR | MB_OK );
  exit(1);
 }
 
 *rc=wglCreateContext(*dc);
 wglMakeCurrent(*dc, *rc);
 
 glClearColor(.5,.5,.5,0);
 glEnable(GL_TEXTURE_2D);
 glEnable(GL_DEPTH_TEST);  
}

Reply

Marsh Posté le 24-10-2001 à 08:24:56    

Normalement ca ca devrait passer.
 
DEVMODE dmScreenSettings;     // Device Mode
  memset(&dmScreenSettings,0,sizeof(dmScreenSettings));  // Makes Sure Memory's Cleared
  dmScreenSettings.dmSize=sizeof(dmScreenSettings);  // Size Of The Devmode Structure
  dmScreenSettings.dmPelsWidth = width;   // Selected Screen Width
  dmScreenSettings.dmPelsHeight = height;   // Selected Screen Height
  dmScreenSettings.dmBitsPerPel = bits;    // Selected Bits Per Pixel
  dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
 
if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
erreur
}

Reply

Marsh Posté le 24-10-2001 à 08:24:56   

Reply

Marsh Posté le 24-10-2001 à 17:31:48    

Godbout a écrit a écrit :

Normalement ca ca devrait passer.
 
DEVMODE dmScreenSettings;     // Device Mode
  memset(&dmScreenSettings,0,sizeof(dmScreenSettings));  // Makes Sure Memory's Cleared
  dmScreenSettings.dmSize=sizeof(dmScreenSettings);  // Size Of The Devmode Structure
  dmScreenSettings.dmPelsWidth = width;   // Selected Screen Width
  dmScreenSettings.dmPelsHeight = height;   // Selected Screen Height
  dmScreenSettings.dmBitsPerPel = bits;    // Selected Bits Per Pixel
  dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
 
if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
erreur
}  




 
Non ça passe pas. C exactement ce que j'ai fait (cf plus haut!)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed