ほとんどの場合、これらの問題は「未定義の動作」のカテゴリに分類されます(C ++の意味ではありませんが、より広い理解で)。
あなたがやろうとしていることは、基本的にMonoGameによって提供される抽象化を回避することです(例として、これはもちろん、基本的にそのようなより高レベルのAPIに適用されます)。そうすることで、クラスの不変の保証に違反する可能性があります。つまり、MonoGameの作成者がコードを記述できたという仮定が真でなくなり、コードが予期せず動作する可能性があります。あなたがそれらを壊したので、あなた自身のコードはもはや抽象の不変の保証にももはや依存することができません。
この予期しない動作には、単純なレンダリングアーティファクトからクラッシュやメモリ破損まで、そのような動作の全範囲が含まれる可能性があります。
たとえば、MonoGame自体をエンドランしてレンダリングAPIの状態をいじる場合、状態の変化を検出できない場合があります(おそらく、基になるAPIの変更をポーリングしないため、単純に行う方が効率的です。 APIを制御するものであり、それらの変更自体を追跡するものと想定します)。その結果、次のレンダーパスで、実際に更新する必要があるものを更新する必要がないと判断し、シーンが正しくレンダリングされない場合があります。
または、基盤となるAPIをいじって、一部のデバイスオブジェクト(D3Dを想定)の参照カウントを変更することもできます。つまり、MonoGameの下から時期尚早に解放されるか、誤って解放されず、クラッシュまたはリソースリークの可能性があります。
または、機能するものを実行することもできますが、サポートされていない方法で、文書化されていない機能や予期しないアクセスパターンでいたずらしているため、次のリリースでコードがひどく壊れる可能性があります。
または、何かできるかもしれませんが、いくつかのバージョンでは問題なく機能しますが、後で他のバグに遭遇して追跡するのが難しいため、MonoGameの担当者に助けを求めます。彼らのコードの問題。もちろん、バグを再現することはできません。最終的に、この奇妙なダイレクトアクセスハッカーを実行していることが判明し、その時点で-ハッカーがバグの根本的な原因であるかどうかに関係なく-おそらく、サポートされていないことを行っているという理由だけで、修正にリソースを費やすのをやめるでしょう(少なくとも、優先順位が低くなる可能性があります)。
もちろん、APIを完全に回避しなければならない場合もあります。おそらく、正式なパッチが間に合わずに出荷されるソフトウェアのバグを回避するためです。あなたが絶対場合は持っている範囲を狭くできる限りあなたの直接アクセスを試して、あなたはあなたがおせっかいで終了したとき、あなたができるだけ変わらないように根本的なAPIの状態のままにしようとすることを確認してください。これを実行するには、ソフトなアプローチを取る必要があります。これは成功を保証するものではありませんが、役立ちます。
ただし、このようなことは完全に回避するのが理想的です。