Question

Multi-échantillonnage est une manière de postuler anticrénelage plein écran (FSAA) dans les applications 3D.Je dois utiliser le multi-échantillonnage dans mon programme OpenGL, qui est actuellement intégré dans un wxWidgets Interface graphique.Y a-t-il un moyen de faire cela?Veuillez répondre uniquement si vous connaissez les étapes détaillées pour y parvenir.

Je sais qu'il est possible d'activer le multi-échantillonnage en utilisant WGL (Extensions Win32 à OpenGL).Cependant, étant donné que mon programme OpenGL n'est pas écrit en MFC (et que je souhaite que le code soit portable sur plusieurs plates-formes), ce n'est pas une option pour moi.

Était-ce utile?

La solution

J'ai finalement réussi à faire fonctionner le multi-échantillonnage avec mon programme wxWidgets OpenGL.C'est un peu compliqué en ce moment, mais voici comment procéder :

wxWidgets n'a pas Multi-échantillonnage soutien dans leur versions stables en ce moment (la dernière version en ce moment est 2.8.8).Mais il est disponible sous forme de correctif et également via leur instantané quotidien.(Ce dernier point est encourageant, car cela signifie que le correctif a été accepté et devrait apparaître dans les versions stables ultérieures s'il n'y a aucun problème.)

Il y a donc 2 options :

  1. Téléchargez et construisez à partir de leur instantané quotidien.

  2. Obtenir le correctif pour votre installation wxWidgets fonctionnelle.

J'ai trouvé la 2ème option moins encombrante, car je ne souhaite pas perturber au maximum mon installation en état de marche.Si vous ne savez pas comment appliquer des correctifs sous Windows, consultez ce.

Au minimum, pour Windows, le patch modifiera les fichiers suivants :

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

Après le patch, recompiler les bibliothèques wxWidgets.

Pour activer le multi-échantillonnage dans votre programme wxWidgets OpenGL, des modifications mineures du code sont requises.

Une liste d'attributs doit être transmise au wxGLCanvas constructeur:

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

Si vous utilisiez déjà une liste d'attributs, ajoutez la ligne avec GL_SAMPLE_BUFFERS, GL_TRUE à cela.Sinon, ajoutez cette définition de liste d'attributs à votre code.

Modifiez ensuite votre constructeur wxGLCanvas pour prendre cette liste d'attributs comme paramètre :

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

Une fois l'élément wxGLCanvas créé, le multi-échantillonnage est activé par défaut.Pour le désactiver ou l'activer à volonté, utilisez les appels OpenGL associés :

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

Le multi-échantillonnage devrait désormais fonctionner avec le programme wxWidgets OpenGL.Espérons que cela devrait bientôt être pris en charge dans la version stable de wxWidgets, rendant cette information non pertinente :-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top