2010-01-29 12 views
2

J'utilise C# avec Visual Studio Express 2008.Tao OpenGL Framework SimpleOpenGLControl - Quand sera-t-il redessiné, quand n'est-ce pas?

J'utilise également les dll Tao Framework OpenGL.

Qu'est-ce qui provoque le redimensionnement de SimpleOpenGLControl lorsque j'en ai besoin pour le redessiner?

Lorsque le SimpleOpenGLControl réside sur le formulaire actif, tout ce que j'ai besoin de faire pour redessiner est d'appeler glFlush() et SimpleOpenGLControl.Invalidate().

Cependant, lorsque le contrôle ne réside pas sur le formulaire actif, je ne peux pas l'obtenir à redessiner, du tout. J'ai trouvé un moyen d'invalider le contrôle par des moyens non orthodoxes, mais cela ne redessine pas le contenu du contrôle (le rendu 3D), il me laisse simplement un contrôle vide (noir).

Que dois-je faire pour que le contrôle soit réellement redessiné, quelle que soit la forme active?

Répondre

3

Apparemment, mon problème ne résidait pas dans la redéfinition SimpleOpenGLControl, mais dans le thread à partir duquel les fonctions étaient appelées.

Mon application attend qu'elle reçoive de nouvelles données dans un fil, puis renvoie les données aux formulaires via une fonction d'affichage déléguée.

Bien qu'aucune erreur ou avertissement n'ait été signalé, mon tampon de rendu OpenGL n'a apparemment pas été rempli car les fonctions qui le remplissaient étaient appelées à partir d'un thread indépendant. Bien que je ne comprenne pas complètement la délégation de fonctions threadsafe, j'ai poussé les procédures à travers sous le thread sur lequel les formulaires fonctionnaient, et mon tampon de rendu OpenGL est heureux une fois de plus. Donc, la réponse à ma question était: OpenGL ne peuplera pas de tampons de rendu, sauf si cela se produit sur le même thread qu'il a été initialisé.