Choosepixelformat & Setpixelformat

Signaler
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012
-
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012
-
Voila, je developpe actuellement sur dev-c++, et l'utilisation de ces deux fonctions me renvoie une erreur de linkage. Je voudrais donc savoir ce qui peut manquer à mon programme ou à mon projet pour qu'il fonctionne correctement.
P.S. : il s'agit d'un tutorial sur l'opengl.


#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>

HINSTANCE HInst;
HDC DC;
HGLRC RC;

/* Fonction qui associe le RC au DC*/

void SetupPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), //taille du descripteur de format
1, //version
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER, //Propriété
PFD_TYPE_RGBA, //Mode de couleurs
16, //Bits de couleur
0, 0, 0, 0, 0, 0, //Paramètres des couleurs
0,0, //Paramètres alpha
0,0, 0, 0, 0, //Paramètres du buffer d'accumulation
32, //Bits de profondeur
0, //Bits du buffer stencil
0, //Nombre de buffers auxiliaires
0, //ignoré (obsolète)
0, //réservé/code>
0, //ignoré (obsolète)
0, //Couleur de transparence
0 //Ignoré (obsolète)
};

int pixelFormat;
pixelFormat = ChoosePixelFormat(hDC, &pfd);
if (!pixelFormat)
{



MessageBox
(
WindowFromDC(hDC),
"Mode graphique non supporté",
"Problème",
MB_ICONERROR | MB_OK
);
exit(1);
/*Vérifie si un PixelFormat du type demandé existe*/
}
if (!SetPixelFormat(hDC, pixelFormat, &pfd))
{


MessageBox
(
WindowFromDC(hDC),
"Mode graphique non supporté",
"Problème",
MB_ICONERROR | MB_OK
);
exit(1);
/*Applique le PixelFormat. Arrête si erreur*/
}
}

/* Definition de la fonction WinProc qui sert au transit des messages*/

LRESULT CALLBACK WinProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
switch(uMsg)
{
case WM_CLOSE:

wglMakeCurrent(NULL, NULL);
if (RC) wglDeleteContext(RC);
ReleaseDC(hwnd,DC);
PostQuitMessage(0);
break;

//Libère RC et DC et ferme le programme
case WM_CREATE:

DC=GetDC(hwnd);
SetupPixelFormat(DC);
RC = wglCreateContext(DC);
if (!RC) SendMessage(hwnd,WM_CLOSE,0,0);
wglMakeCurrent(DC, RC);
break;

//Récupère le DC et le RC
default:

return DefWindowProc(hwnd,
uMsg,
wParam,
lParam);
break;

//Sinon, fait le truc habituel
}
return 0;
}

//Fonction main en Windows : WinMain

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
/* Recup des infos venant de l'appelant*/
HInst = hInstance;

/* Definition de la classe fenêtre*/

WNDCLASS WindowClass =
{ 0, //Style
WinProc, //Procédure pour la gestion des messages
0, //octets supplémentaires à allouer à la classe
0, //octets supplémentaires à allouer à la fenêtre
HInst, //Handle du programme
0, //Icne
0, //Curseur
0, //Couleur d'arrière-plan
NULL, //Pointeur sur le menu associé à la classe
"La classe!" //Nom de la classe fenêtre
};
if (!RegisterClass(&WindowClass)) exit(1);


/* Création de la première fenêtre OpenGL*/
HWND OpenGLWindow = CreateWindow
( "La classe!", //Classe de la fenêtre
"Fenêtre OpenGL", //Nom de la fenêtre
WS_VISIBLE | WS_BORDER, //Caractéristiques
0, //Position x
0, //Position y
640, //Largeur
480, //Hauteur
0, //Handle de la fenêtre même
0, //Identifiant de la fenêtre fille
HInst, //HINSTANCE du programme
NULL /*Chaine de caractères envoyée
en paramètre lors de la création
de la fenêtre*/
);
if (!OpenGLWindow) exit(1);


/*Recup des messages venant de l'extèrieur et dispatching vers les differents processus !*/
MSG msg;
do
{
while (PeekMessage(&msg,OpenGLWindow,0,0,PM_NOREMOVE))
{

if(!GetMessage(&msg,OpenGLWindow,0,0)) exit(0); // Le message WM_QUIT qui doit faire quitter le prog fait renvoyer 0 par GetMessage
DispatchMessage(&msg);

}
}
while(1);
/* LOL : Pour la forme*/
return 0; //(pour la forme)
}

Sachant que les deux fichiers que j'ai inclus dans le projet sont :
libopengl32.a et libglu32.a

Merci d'avance !

5 réponses

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Il ne faut pas les inclure dans le projet ces fichiers...
Il faut les mettre au linker :)

Donc tu fais : Projet -> Options du Projet -> Paramètres -> Ajouter Fichier
Et voilà tu charges tes fichier opengl32 etc... et c'est bon normalement :)

void Aurevoir( void ); //Bonne journée
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Je me suis mal exprimé, excuse moi, c'est ce que j'ai fait
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Please !!!!! If someone could help me it would be very grateful !!!!!!!

ce sont bien les fichiers "libopengl32.a" et "libglu32.a" qu'il faut inclure dans la partie linker par l'intermédiaire de ajout de fichier ? Si c'est le cas c bien ce que g fait mais ya pas moyen ca marche pas !

Je ne pige pas...... Ca fait quelques tutos que j'essaye mais la seule chose que j'ai réussi a obtenir pour le moment en prenant les codes directement dans les tutos ce sont des erreurs de linkage ou des fenêtres noires lorsqu'il fallait afficher quelque chose. (a ce moment ct avec un tuto SDL).
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Je pense avoir trouvé la réponse à ma question : il manquait la librairie "libgdi32.a" . Par contre de ça découle autre chose. Est-il normal que la fenêtre qui s'affiche recopie ce qui est derrière elle comme arrière fond (comme si elle étit transparent au moment du lancement uniquement) et que les bouton Alt+F4 qui sont, d'après le toturial activés, ne marchent plus mantenant que j'ai mis cette librairie (ils marchait avant) ?
Messages postés
246
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
11 mars 2012

Je tien a rectifier le tire : Alt-F4 fonctionne a première vue normalement une fois que j'ai bien selectionnée la fenetre opengl. Par contre je continue a n'avoir un affichage que par transparence !