Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
885 connectés 

  FORUM HardWare.fr
  Programmation

  [C] OpenGL en FullScreen

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] OpenGL en FullScreen

n°67296
sombresong​e
Posté le 23-10-2001 à 23:17:48  profilanswer
 

:hello: Comment on fait sous win32?

 

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

mood
Publicité
Posté le 23-10-2001 à 23:17:48  profilanswer
 

n°67298
youdontcar​e
Posté le 23-10-2001 à 23:36:51  profilanswer
 

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

n°67302
tgrx
My heart is pumping for love
Posté le 24-10-2001 à 00:02:12  profilanswer
 

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

n°67306
sombresong​e
Posté le 24-10-2001 à 00:15:18  profilanswer
 

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...

n°67309
tgrx
My heart is pumping for love
Posté le 24-10-2001 à 00:47:17  profilanswer
 

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

n°67310
sombresong​e
Posté le 24-10-2001 à 00:56:06  profilanswer
 

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.)

n°67311
tgrx
My heart is pumping for love
Posté le 24-10-2001 à 01:06:19  profilanswer
 

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 :(

n°67312
sombresong​e
Posté le 24-10-2001 à 01:11:32  profilanswer
 

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(...);

n°67320
sombresong​e
Posté le 24-10-2001 à 02:54:31  profilanswer
 

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);  
}

n°67327
godbout
Génial.
Posté le 24-10-2001 à 08:24:56  profilanswer
 

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
}

mood
Publicité
Posté le 24-10-2001 à 08:24:56  profilanswer
 

n°67457
sombresong​e
Posté le 24-10-2001 à 17:31:48  profilanswer
 

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!)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] OpenGL en FullScreen

 

Sujets relatifs
[OPENGL]question de cliping et de fondflash fullscreen
3Dsmax vers OpenGLproblème, les focntions opengl me donnent unresolved external symbol
[ Opengl ] + [ glut ]mettre en plein ecran.[OPENGL] + [ 3DSMAX]
[ opengl ] : avis aux pros. => colisions.Projet Win32 + OpenGL pour ceux que ca interesse
Moteur 3D, D3D OpenGL et concepteurs[GLUT/OPENGL/C++]Probleme de perfomance, c normal
Plus de sujets relatifs à : [C] OpenGL en FullScreen


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR