Well, using the Monogame SDL2 version, I finally got my game running on Linux and Mac, but it runs maybe 100x slower. Researching the problem with the mono profiler, I found out that my game spends a huge amount of time deadlocking in System.Thread.WaitAny, much more so than in the Windows version. Can anyone shed light on how this might be, and what I can do to fix it? Thanks.
Okay, problem seems to be related to various OpenGL threading issues. When setting texture data or vertex buffer data, there seems to be some kind of internal locking going on. The problem is, I have my own external locking system around all these resources. My external locks + the internal locks in monogame result in deadlock.