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 actif
    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
    Points : 230
    Points
    230
    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 actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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