In den meisten Fällen fallen diese Probleme in die Kategorie "undefiniertes Verhalten" (nicht im C ++ - Sinne, aber im weiteren Sinne).
Was Sie tun würden, ist im Wesentlichen die von MonoGame bereitgestellte Abstraktion zu umgehen (als Beispiel gilt dies natürlich grundsätzlich für jede solche übergeordnete API). Auf diese Weise können Sie dazu führen, dass klasseninvariante Garantien verletzt werden. Dies bedeutet wiederum, dass die Annahmen, unter denen die MonoGame-Autoren ihren Code schreiben konnten, möglicherweise nicht mehr zutreffen und sich der Code möglicherweise unerwartet verhält. Ihr eigener Code kann sich auch nicht mehr auf die unveränderlichen Garantien der Abstraktion verlassen, da Sie diese gebrochen haben.
Dieses unerwartete Verhalten umfasst möglicherweise die gesamte Bandbreite eines solchen Verhaltens, von einfachen Rendering-Artefakten bis hin zu Abstürzen oder Speicherbeschädigungen.
Wenn Sie beispielsweise mit einem Rendering-API-Status herumspielen, indem Sie MonoGame selbst ausführen, kann es diese Statusänderung möglicherweise nicht erkennen (da die zugrunde liegende API wahrscheinlich nicht nach Änderungen abgefragt wird, ist dies effizienter Angenommen, es ist derjenige, der die API steuert, und verfolgen Sie diese Änderungen selbst. Infolgedessen kann es beim nächsten Renderdurchlauf entscheiden, dass nichts aktualisiert werden muss, was tatsächlich aktualisiert werden sollte, und dass Ihre Szene möglicherweise nicht korrekt gerendert wird.
Oder Sie könnten mit der zugrunde liegenden API herumspielen und die Referenzanzahl eines Geräteobjekts ändern (unter der Annahme von D3D). Dies bedeutet, dass es unter MonoGame vorzeitig freigegeben oder versehentlich nicht freigegeben wird, was zu einem wahrscheinlichen Absturz oder einem Ressourcenleck führt.
Oder Sie könnten etwas tun, das funktioniert, aber weil Sie auf nicht unterstützte Weise und mit undokumentierten Funktionen oder unerwarteten Zugriffsmustern herumspielen, könnte Ihr Code in der nächsten Version schrecklich kaputt sein.
Oder Sie könnten etwas tun, es funktioniert gut für einige Versionen, aber später stoßen Sie auf einen anderen Fehler und haben Schwierigkeiten, ihn aufzuspüren. Deshalb bitten Sie die MonoGame-Leute um Hilfe und senden möglicherweise einen Fehlerbericht, weil Sie sicher sind, dass dies der Fall ist ein Problem in ihrem Code. Sie können den Fehler natürlich nicht reproduzieren, und es stellt sich schließlich heraus, dass Sie dieses seltsame Hackery mit direktem Zugriff ausführen und an diesem Punkt - unabhängig davon, ob Ihr Hackery die Hauptursache des Fehlers ist oder nicht - sie Ich werde wahrscheinlich aufhören, Ressourcen für Ihr Update auszugeben, nur weil Sie eine nicht unterstützte Sache tun (oder zumindest werden sie Sie wahrscheinlich weniger priorisieren).
Natürlich, in einigen Fällen könnten Sie unbedingt haben die API zu umgehen, vielleicht zu arbeiten um einen Fehler in der Software - Versand , für die die offiziellen Patch nicht rechtzeitig freigegeben werden. Wenn Sie unbedingt haben , dies zu tun, sollten Sie den weichen Ansatz: Versuch Umfang Ihren direkten Zugang so eng wie möglich, und stellen Sie sicher , dass Sie versuchen , den Zustand des zugrunde liegenden API möglichst unverändert zu lassen , wenn Sie fertig sind mit Ihrem einmischen . Es ist keine Garantie für den Erfolg, aber es kann helfen.
Im Idealfall vermeiden Sie solche Dinge jedoch vollständig.