I am using C# and DirectX7 (in DxVBLib) to create a tiled game editor / interpreter.
It allocates a "GameData" object that contains the current game data.
I want to have an independent window that shows the "current" view of the game data. For this, I created a ViewForm class, which I allocate with new and call ".Show" on. This invoked the load event on this form.
Once created, I have a function in ViewForm that loops. It paints the game onto a backbuffer and flips it onto the primary buffer using Direct X 7 .
I want to call this function when I click on a button on my main form. The way I have it, is that the click event on MainForm invokes myGameData.displayGame(), which in turn invokes myGameData.myViewForm.startApp() which is a loop that displays the game field at a fixed frames-per-second rate.
W/out threading, the loop paints a DirectX backbuffer and then flips it into the primary buffer. Because it is not multi threaded, the loop doesn't end, so I have to call Application.DoEvents() to keep the two windows from hanging until the call ends.
What I want to do is to put the whole displayGame() call into a thread. The problem is when I do, the DirectX calls fail. It looks like it looses the DirectX context or something.
I did the basic thing:
Thread t = new Thread( new ThreadStart(myViewForm.myLoop(ref myGameData)));
t.Start();
I am allocating and initializing DirectX in the constructor for the ViewForm.
Any ideas?
Some questions:
a) Should I initialize direct X inside the function (i.e. local to the thread?)
b) If I want to have multiple instances of this DirectX stuff, will they interfeer with each other?
I hope this makes sence.
Dave