В большинстве случаев эти проблемы попадают в категорию «неопределенного поведения» (не в смысле C ++, а в более широком понимании).
То, что вы будете делать, - это, по сути, обойти абстракцию, предоставляемую MonoGame (например, это, конечно, относится в основном к любому такому высокоуровневому API). При этом вы можете нарушить гарантии инварианта класса, что, в свою очередь, означает, что предположения, под которыми авторы MonoGame могли писать свой код, могут больше не соответствовать действительности, и код может вести себя неожиданно. Ваш собственный код больше не может полагаться на инвариантные гарантии абстракции, поскольку вы их нарушили.
Это неожиданное поведение может включать в себя весь спектр такого поведения от простых артефактов рендеринга до сбоев или повреждения памяти.
Например, если вы возитесь с некоторым состоянием API рендеринга, выполняя в конечном итоге обход самого MonoGame, он может оказаться не в состоянии обнаружить это изменение состояния (поскольку он, вероятно, не будет опрашивать базовый API на предмет изменений, для него более эффективно просто предположим, что это тот, кто контролирует API и сам отслеживает эти изменения). Следовательно, при следующем проходе рендеринга он может решить, что ему не нужно обновлять что-то, что на самом деле должно быть обновлено, и ваша сцена может отображаться некорректно.
Или вы можете связываться с базовым API и изменять счетчик ссылок какого-либо объекта устройства (при условии D3D), что означает, что он может быть преждевременно освобожден из-под MonoGame или случайно не выпущен, что приведет к вероятной аварии или утечке ресурсов.
Или вы могли бы сделать что-то, что работает, но поскольку вы копаетесь в неподдерживаемой манере и с недокументированными функциями или неожиданными шаблонами доступа, вы можете обнаружить, что ваш код ужасно сломан в следующем выпуске.
Или вы могли бы что-то сделать, это хорошо работает для нескольких версий, но позже вы столкнетесь с какой-то другой ошибкой и столкнетесь с трудностями при ее обнаружении, поэтому вы попросите людей MonoGame о помощи, возможно, отправив отчет об ошибке, потому что вы уверены, что его проблема в их коде. Конечно, они не могут воспроизвести ошибку, и в конце концов выясняется, что вы делаете эту странную хакерскую работу с прямым доступом, и в этот момент - независимо от того, является ли ваша хакерская атака основной причиной ошибки - они Вероятно, вы перестанете тратить ресурсы на ваше исправление просто потому, что вы делаете неподдерживаемую вещь (или, по крайней мере, они, скорее всего, прекратят расставлять приоритеты).
Конечно, в некоторых случаях вы можете абсолютно должны обойти API, возможно работать вокруг ошибки в судоходство программного обеспечения , для которых официальный патч не будет выпущен во времени. Если вам абсолютно необходимо это сделать, вам следует придерживаться мягкого подхода: постарайтесь ограничить свой прямой доступ настолько узко, насколько это возможно, и убедитесь, что вы пытаетесь оставить состояние базового API как можно более неизменным, когда закончите свое вмешательство. , Это не гарантия успеха, но это может помочь.
В идеале, вы должны избегать такого рода вещей полностью.