IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

Contexte OpenGL et fullScreen


Sujet :

wxWidgets

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut Contexte OpenGL et fullScreen
    Bonjour,

    J'ai une fenetre wxWidgets qui me permet d'afficher de l'openGl et elle fonctionne bien. Mais quand je veux passer du mode fullScreen à une fenetre normal : ça ne fonctionne pas sur Windows (et sur Linux, ça fonctionne) !

    Voici mon code main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #include "main.h"
     
    IMPLEMENT_APP(Ini);
    bool Ini::OnInit(void)
    {
    	(new myFrameMain())->Show(true);
    	return true;
    }
     
    myFrameMain::myFrameMain() : wxFrame(NULL, -1, "Test", wxPoint(-1, -1), wxSize(800,600), wxDEFAULT_FRAME_STYLE)
    {
    	int attribsList[] = {WX_GL_RGBA, WX_GL_MIN_RED, 1, WX_GL_MIN_GREEN, 1, WX_GL_MIN_BLUE, 1, WX_GL_MIN_ALPHA, 1, WX_GL_STENCIL_SIZE, 1, WX_GL_DEPTH_SIZE, 1, WX_GL_DOUBLEBUFFER, 0};
    	glCanvas = new myGLCanvas(this, attribsList);
    	wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
    	sizer->Add(glCanvas, 1, wxALL|wxEXPAND, 0);
    	SetSizer(sizer);
    }
     
    myGLCanvas::myGLCanvas(myFrameMain *parent, int *attribsList) : wxGLCanvas(parent, -1, attribsList, wxPoint(0,0))
    {
    	fullScreen=true;
    	this->parent = parent;
    	glContext = new wxGLContext(this);
     
    	parent->ShowFullScreen(fullScreen);
    }
     
    void myGLCanvas::onIdle(wxIdleEvent &event)
    {
    	SetCurrent(*glContext);
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	SwapBuffers();
    	event.RequestMore();
    }
     
    void myGLCanvas::onKeyDown(wxKeyEvent &event)
    {
    	if(event.GetKeyCode() == WXK_F1)
    	{
    		fullScreen=!fullScreen;
    		parent->ShowFullScreen(fullScreen);
    	}
    }
     
    BEGIN_EVENT_TABLE(myGLCanvas, wxGLCanvas)
    	EVT_IDLE(myGLCanvas::onIdle)
    	EVT_KEY_DOWN(myGLCanvas::onKeyDown)
    END_EVENT_TABLE()
    main.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <wx/wx.h>
    #include <wx/glcanvas.h>
     
    struct Ini : public wxApp
    {
    	virtual bool OnInit();
    };
     
    class myGLCanvas;
    class myFrameMain : public wxFrame
    {
    	public:
    		myFrameMain(void);
     
    	private:
    		myGLCanvas *glCanvas;
    };
     
    class myGLCanvas : public wxGLCanvas
    {
    	public:
    		myGLCanvas(myFrameMain *, int *);
     
    	protected:
    		DECLARE_EVENT_TABLE()
     
    	private:
    		bool fullScreen;
    		myFrameMain *parent;
    		wxGLContext *glContext;
    		void onIdle(wxIdleEvent &);
    		void onKeyDown(wxKeyEvent &);
    };
    NB : Si je met la variable fullScreen à "false" pour commencer, le programme fonctionne parfaitement !


  2. #2
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    essay de recréer un context opengl en fullscreen ou de refaire le lien
    Handle->DC->HGLRC.
    Fenêtre->Pont->GLContext
    Par contre fait gaffe à partager tes resources opengl entre (ou de garder un HGLRC commun )

    EDIT:
    ton DECLARE_EVENT_TABLE() est mal placé , pas la peinne de le mettre en protected il est automatiquement mis en private donc ce qui suis est en private , d'ailleur il est conseiller de le mettre en dernier.

Discussions similaires

  1. Context opengl, création / destruction
    Par shenron666 dans le forum OpenGL
    Réponses: 3
    Dernier message: 12/10/2007, 10h39
  2. problème d'affichage d'un contexte opengl
    Par stardeath dans le forum Windows
    Réponses: 1
    Dernier message: 17/07/2007, 14h04
  3. import fichier vrml avec coin3d dans un contexte openGL
    Par kikodingo dans le forum OpenGL
    Réponses: 1
    Dernier message: 08/05/2007, 22h28
  4. [Carbon] OpenGL en Fullscreen avec choix sortie graphique
    Par NiamorH dans le forum Développement OS X
    Réponses: 8
    Dernier message: 22/03/2007, 09h45
  5. OPENGL Couleurs Fullscreen
    Par Boublou dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/09/2002, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo