Fr/SimGear: Difference between revisions

Jump to navigation Jump to search
695 bytes added ,  23 December 2022
Traduction intégrale
(Traduction partielle)
(Traduction intégrale)
Line 18: Line 18:


===Structures de données OSG===
===Structures de données OSG===
Bien entendu, nous faisons référence à OSG à de nombreuses rep^rises. Mais si je construis une application sur SimGear, j'espère y trouver des classes SimGear. SGProperties sont des classes SimGear, et si vous utilisez le système de propriétés, vous ne voudrez peut-être pas dépendre d'OSG.
Bien entendu, nous faisons référence à OSG à de nombreuses reprises. Mais si je construis une application sur SimGear, j'espère y trouver des classes SimGear. SGProperties sont des classes SimGear, mais si vous utilisez le système de propriétés, vous ne voudrez peut-être pas dépendre d'OSG.


... Egalement, d'expérience, en passant à un autre concepteur de scène, je préférerais ne voir aucune référence OSG:: .. Du tout dans l'équipement de vol - à l'exception de quelques trucs liés au spectateur. Mais la partie simulation de FlightGear ne devrait pas avoir besoin de savoir que la visionneuse fonctionne sur OSG/OpenGL. Donc, regarder SimGear comme une bibliothèque d'utilitaires pour les applications de simulation, cela a du sens de mon point de vue ...
... Également, d'expérience, en passant à un autre concepteur de scène, je préférerais ne voir aucune référence OSG:: .. Du tout dans l'équipement de vol - à l'exception de quelques trucs liés au spectateur. Mais la partie simulation de FlightGear ne devrait pas avoir besoin de savoir que la visionneuse fonctionne sur OSG/OpenGL. Donc, regarder SimGear comme une bibliothèque d'utilitaires pour les applications de simulation, cela a du sens de mon point de vue ...


Donc, même si vous avez besoin de plus de code de colle, il serait préférable d'éviter les classes OSG dans les constituants de SimGears qui ne sont pas liées à la scénographie. Le système de propriété est un vaste domaine.
Donc, même si vous avez besoin de plus de code de colle, il serait préférable d'éviter les classes OSG dans les constituants de SimGears qui ne sont pas liées à la scénographie. Le système de propriété est un vaste domaine.
Line 28: Line 28:
Imaginez que vous vouliez changer la bibliothèque de la visionneuse. C'est toujours le même problème. En intégrant les classes OSG un peu partout dans le code sans aucune forme d'abstraction, vous devez réécrire toute la pile de code interfaçant SimGear et OSG.  
Imaginez que vous vouliez changer la bibliothèque de la visionneuse. C'est toujours le même problème. En intégrant les classes OSG un peu partout dans le code sans aucune forme d'abstraction, vous devez réécrire toute la pile de code interfaçant SimGear et OSG.  


Cela a été fait lors du passage à OSG et une grande partie de ce travail était presque uniquement pour cette raison que nous avons tous les types de concepteurs de scène directement répartis. Donc, s'il vous plaît, évitez d'avoir OSG:: quoi que ce soit qui se répande dans l'ensemble de l'application.En dehors de cela, avoir plus de chemins de code séparés en général pour les parties de simulation et les parties visionneuse/scène aiderait grandement pour beaucoup de nos problèmes d'évolutivité. Donc, juste en pensant à la conception générale du logiciel ... Donc, rien n'est gravé dans le marbre ici, mais il est logique, à l'OMI, de se diriger vers cette séparation lorsque cela est possible / raisonnable.


Plus en détail pour le comptage des références. Je n'aime pas l'implémentation référencée d'OSG. C'est déjà très lourd. A certains membres dont nous n'avons en aucun cas besoin dans quelque chose qui dépend de la simulation. Le truc observe_ptr n'est pas thread-safe, et l'implémentation de l'observateur ne s'adapte pas bien si vous avez de nombreux observateurs. La référence a déjà une vtable.


That was done during the switch to osg and plenty of that work was almost only for that reason we have all the sg types directly spread around.  
Ce que nous avons est une chose très faible qui pourrait être utilisée de manière basique mais qui est beaucoup plus flexible même pour des objets plus petits. Je préférerais garder cette propre implémentation. Il en va de même pour les vecteurs OSG. Ils sont soignés, mais incohérents sur les types de membres. Là aussi, le système de collision manque.
So please avoid having osg::whatever spread around in the whole application.


Appart from that, having more separate code paths in general for the simulation parts and the viewer/scene parts would help for plenty of our
La règle d'or pour utiliser ce qui est simple :
scalability problems a lot. So just thinking about general software design ... So nothing is set in stone here, but it makes sense IMO to head into that
separation where possible/sensible.


More in detail for the reference counting. I do not like the referenced implementation of osg. That is already very heavyweight. Has some members we
* Si vous êtes dans le concepteur de scène, OSG::... peut être une bonne chose à utiliser.
do not need in any way in something simulation dependent. The observed_ptr stuff is not thread safe, also that observer implementation does not scale well if you have many observers. Referenced already has a vtable. Just to name a few ...
* Si vous êtes dans la simulation, le réseau, le système d'entrée, le système de propriété, où que vous soyez


What we have is a very weak thing that could be used in the same basic way but is way more flexible even for smaller objects. I would prefer to keep that own implementation. The same goes for the osg vectors. They are neat, but inconsistent over the member types. Also the collision system is missing
ne dépend pas du concepteur de scène, utilisez les propres classes de SimgGar.
there.


The rule of thumb when to use what is simple:
Scenegraph signifie donc OSG::ref_ptr et fg/sg signifie SGSharedPtr. Et d'un point de vue abstrait, l'utilisation d'OSG* ne devrait pas être trop visible. Ces endroits où cette règle est enfreinte sont quelque chose que je n'aime pas non plus. Comme déjà dit, je pense que ce n'est pas une bonne idée de lier une simulation à un cadre de visualisation. Et un scénographie n'est rien de plus que ça...
*If you are in the scene graph most probably osg::... might be a good thing to use.
*If you are in the simulation, network, input system, property system, wherever
not scene graph dependent, use simgears own classes.


So scenegraph means osg::ref_ptr and fg/sg means SGSharedPtr.
Je ne dirais donc pas qu'il s'agit d'un objectif de conception difficile. Mais si nous pouvons faire cela, je crois que nous en retirerons un avantage à moyen/long terme.
And from an abstraction point of view osg* usage should not be visible too much.
Those places where this rule is broken is something I do not like either. As already told, I believe that it is not a good idea to tie a simulation to a
viewer framework. And a scenegraph is nothing more than that ...
 
So I would not tell that a hard design goal. But If we can make that I believe  that we will get a benefit in doing so in the mid/long term.


===SGReferenced vs. Boost===
===SGReferenced vs. Boost===
When using std::tr1:shared_ptr you will need two allocations for a new object that is used with the the std::shared_ptr implementation - one for the object and one for the reference count. I like to use that SGReferenced stuff for many small lightweight objects that should not take to much time to create and should not take too much space. That kind of the solution is the most lightweight one I can think of.  
Lors de l'utilisation de std::tr1:shared_ptr, vous aurez besoin de deux allocations pour un nouvel objet utilisé avec l'implémentation std::shared_ptr - une pour l'objet et une pour le nombre de références. J'aime utiliser ce matériel SGReferenced pour de nombreux petits objets légers qui ne devraient pas prendre trop de temps à créer et ne devraient pas prendre trop de place. Ce type de solution est la plus légère à laquelle je puisse penser.


Also you can no longer work with raw pointers passed around and use the reference count included in the object since the shared_ptr implementation has
De plus, vous ne pouvez plus travailler avec des pointeurs bruts transmis et utiliser le décompte de références inclus dans l'objet puisque l'implémentation de shared_ptr a un objet de décompte séparé. Si vous le faites, vous vous retrouverez avec deux décomptes de références pour le même objet. L'implémentation actuelle évite cela et crée des API basées sur des pointeurs bruts si nécessaire.
a separate count object. If you do so you will end up with two reference counts for the same object. The current implementation avoids that and make
raw pointer based apis if required.


So alltogether we have with the SG* version something that works equally well than the shared_ptr/weak_ptr pair and provides some extra features I would
Donc, dans l'ensemble, nous avons avec la version SG* quelque chose qui fonctionne aussi bien que la paire shared_ptr/weak_ptr et fournit quelques fonctionnalités supplémentaires que j'aimerais avoir.
like to have.


The SGAtomic counter could make use of the std::atomic at some point - if we add an additional case int the current implementation selection when we have
Le compteur SGAtomic pourrait utiliser le std :: atomic à un moment donné - si nous ajoutons un cas supplémentaire dans la sélection d'implémentation actuelle lorsque nous l'avons disponible. Cela pourrait être fait sans perdre aucune des fonctionnalités dont nous disposons dans notre implémentation SharedPtr/WeakPtr actuelle. La seule chose dans tr1 est le shared_ptr/weak_ptr. Je ne suis pas sûr de ce que comprend TR2.
that available.
This could be done without loosing any of the features we have available in our current SharedPtr/WeakPtr implementation.
The only thing in tr1 is the shared_ptr/weak_ptr. I am Not sure what tr2 includes.


What I am missing in the intrusive pointer is a thread safe implementation of the weak_ptr. Note that we already have that in simgear ...
Ce qui me manque dans le pointeur intrusif, c'est une implémentation thread-safe de la faiblesse_ptr. Notez que nous avons déjà cela dans SimGear ... Pas encore pensé à cela, mais y a-t-il une chance d'implémenter la sémantique de low_ptr avec le intrusive_ptr ?
Not yet thought about that, but is there any chance to implement the weak_ptr semantics together with the intrusive_ptr?


== Compiling from source==
== Compiling from source==


{{note|If you do not require GUI functionality, the flag <code>-DSIMGEAR_HEADLESS</code> can be set to avoid having to pull [[OpenSceneGraph]] in as a dependency}}
{{note|Si aucune fonctionnalité du GUI n'est requise, l'indicateur <code>-DSIMGEAR_HEADLESS</code> peur être positionné afin d'éviter de créer une adhérence à  [[OpenSceneGraph]]}}


Compilation of SimGear follows the fairly stupid standard procedure for building CMake projects.
La compilation de SimGear suit la procédure standard et simpliste pour la construction de projets CMake.
   
   
  git clone git://git.code.sf.net/p/flightgear/simgear/ flightgear-simgear  
  git clone git://git.code.sf.net/p/flightgear/simgear/ flightgear-simgear  
Line 85: Line 68:
  make install
  make install


==External Links==
==Liens externes==
*Latest Docs - http://simgear.sourceforge.net/doxygen/
*Latest Docs - http://simgear.sourceforge.net/doxygen/
*http://simgear.sourceforge.net/
*http://simgear.sourceforge.net/


==See also==
==Voir aussi==
*[[Building FlightGear]]
*[[Building FlightGear]]
*[[FlightGear related projects]]
*[[FlightGear related projects]]
*[[TerraGear]]
*[[Fr/TerraGear|TerraGear]]


[[Category:Software]]
[[Category:Software]]
729

edits

Navigation menu