Dans la plupart des cas, ces problèmes entrent dans la catégorie des "comportements indéfinis" (pas au sens C ++, mais dans une compréhension plus large).
Ce que vous feriez serait de contourner essentiellement l'abstraction fournie par MonoGame (à titre d'exemple, cela s'applique bien sûr à n'importe quelle API de niveau supérieur). Ce faisant, vous pouvez provoquer une violation des garanties invariantes de classe, ce qui signifie que les hypothèses sous lesquelles les auteurs de MonoGame ont pu écrire leur code peuvent ne plus être vraies et que le code peut se comporter de manière inattendue. Votre propre code ne peut plus vraiment compter sur les garanties invariantes de l'abstraction, puisque vous les avez brisées.
Ce comportement inattendu comprendra potentiellement toute la gamme de ces comportements, du simple artefact de rendu aux plantages ou à la corruption de mémoire.
Par exemple, si vous manipulez certains états de l'API de rendu en exécutant autour de MonoGame lui-même, il peut ne pas être en mesure de détecter ce changement d'état (car il ne sondera probablement pas l'API sous-jacente pour les changements, il est plus efficace pour lui de simplement supposons que c'est celui qui contrôle l'API et suivez ces changements lui-même). Par conséquent, il peut décider, lors de la prochaine passe de rendu, qu'il n'a pas besoin de mettre à jour quelque chose qui devrait en fait être mis à jour et que votre scène peut ne pas s'afficher correctement.
Ou vous pouvez jouer avec l'API sous-jacente et modifier le nombre de références de certains objets de périphérique (en supposant D3D), ce qui signifie qu'il peut être libéré prématurément sous MonoGame ou accidentellement non libéré, entraînant un plantage probable ou une fuite de ressources.
Ou vous pourriez faire quelque chose qui fonctionne, mais parce que vous vous trompez d'une manière non prise en charge et avec des fonctionnalités non documentées ou des modèles d'accès inattendus, vous pourriez trouver votre code horriblement cassé dans la prochaine version.
Ou vous pouvez faire quelque chose, cela fonctionne bien pour quelques versions, mais plus tard vous rencontrez un autre bug et avez du mal à le localiser, alors vous demandez de l'aide aux gens de MonoGame, peut-être en envoyant un rapport de bug parce que vous êtes sûr que son un problème dans leur code. Ils ne peuvent pas reproduire le bogue, bien sûr, et il apparaît finalement que vous faites ce piratage à accès direct bizarre et à ce stade - indépendamment du fait que votre piratage soit la cause racine du bogue - ils Je vais probablement arrêter de dépenser des ressources pour votre correctif simplement parce que vous faites une chose non prise en charge (ou du moins, ils vous donneront probablement un ordre de priorité).
Bien sûr, dans certains cas , vous pourriez absolument avoir à contourner l'API, peut - être au travail autour d' un bogue dans le logiciel d' expédition pour lequel le patch officiel ne sera pas libéré dans le temps. Si vous absolument devez faire cela, vous devez prendre l'approche douce: essayer de champ votre accès direct aussi étroitement que possible, et vous faire vous essayez de sortir de l'état de l'API sous - jacente inchangée que possible lorsque vous avez terminé votre ingérence . Ce n'est pas une garantie de succès, mais cela peut aider.
Idéalement, vous éviterez complètement ce genre de chose.