2012-07-18 3 views
0

Cela devrait être simple: j'utilise un QGLWidget pour dessiner des graphiques openGL et je veux être capable d'écrire quelque chose sur les graphiques openGL rendus, donc j'utilise overpainting comme dans la démo Qt avec QPainter.QGLWidget - comment structurer un programme avec overpainting

Voici mes deux choix de travail de structurer mon programme:

// This works but it's probably stupid 
paintEvent() 
{ 

    makeCurrent(); 

    glewInit(); 

    loadShaders(); 

    loadTextures(); 

    loadBuffers(); 

    ... actually paint something with openGL ... 

    QPainter painter(this); 

    ... overpainting ... 
} 

------------------------------------------------------------------------------------ 

// This works and may probably be better 
paintEvent() 
{ 

    QGLWidget::paintEvent(event); // Base class call, this calls initializeGL ONCE and then paintGL each time it's needed 

    QPainter painter(this); 

    ... overpainting ... 
} 

initializeGL() 
{ 
    glewInit(); 
} 

paintGL() 
{ 
    loadShaders(); 

    loadTextures(); 

    loadBuffers(); 

    ... actually paint something with openGL ... 
} 

Considérant que les textures et les shaders ne vont pas être toujours le même, est une de ces options acceptables (en performances et raisonnablement)?

Sinon: comment structureriez-vous le programme?

Merci pour toute aide

Répondre

0
  1. charge/compilation/lien shaders dans la méthode initializeGL(), parce que l'exploitation des systèmes relativement lent (surtout s'il est lu à partir du disque)
  2. textures de charge dans le initializeGL() méthode

Vous ne savez pas ce que sont les tampons, mais cela semble être le cas lors de l'initialisation, puisqu'elle est effectuée une seule fois.

+0

est-il correct de charger glew là? Je n'ai pas trouvé d'autre endroit pour charger glew –

+0

Remarque: le paintEvent est levé plusieurs fois, malheureusement, le déplacement du code shaders/textures/buffers (VBO) dans initializeGL (qui est appelé juste au changement de contexte) provoque l'application ne pas être bien rendu –

+0

@JohnnyPauling Pas vraiment. glew devrait être dans le principal, car il a besoin argc/argv de la principale() –

Questions connexes