|
|
I've fixed the problem with VisInterface where the Vis exits, bringing
down the entire application.
Changes:
1. Added CVisThread, which wraps a UI thread that actually runs the
Vis. Nothing external to CVisInterface knows about this new thread
(it's hidden in CVisInterface).
2. CVisInterface was changed to use the new CVisThread
I've put a refresh up, based on some issues with COWPump.
Changes:
- There's now a SetChannelMono()/Stereo() method in CVisInterface.
Some apps were looking at this, and the interface didn't have a way to
set it.
- I've added SetSpectrum/WaveformNull() to CVisInterface.
Forgot to add that, as it defaults to Null (so your app can now turn off
both channels and still pump data to the render engine, if for some
reason you want to...)
- I've added a ProcessWinAMPUserMsg. This handles ALL WM_USER
(e.g., WM_WA_IPC) messages that an app can send, and returns/sets
default data. I did this in my continuing search into why some Visualizations
don't work well, or at all. This actually fixed a couple.
I'll be looking at the WM_COMMAND and WM_COPYDATA messages next.
I will be moving the code base and bug tracking over to Sourceforge
at some point soon, as it's a pain to do it this way... and I'm hoping
others will be willing to help out improving it.
The two biggest issues I have right now are:
- When the user kills the plug-in, it brings down COWPump. This is
because they call PostQuitMessage(0) on WM_DESTROY.. which takes COWPump
down with it. Because of what this does, COWPump can't easily
abort this (It ONLY gets a OnDestroy(), which can't be aborted).
I've tried created another hidden window and attach it to the DLL, and
I've tried doing all that from another thread, but it didn't work (the
docs say PostQuiestMessage() actually kills the message queue for the
THREAD). It might be possible to peek into the message queue, or
do something else like that.
- GL Plug-ins that go to full-screen sometimes crash when exiting.
I believe this is because the plug-in starts several threads that get killed
on exit, but BEFORE the CVisRender thread stops rendering... so when the
render() call is made, the plug-in crashes.
If anyone wants to work on these, please do so. If you figure it
out, let me know, or better yet, send
me the code with the fix
Version 1.0 is available on the download
page, along with two samples. Full source code is available. The
first real program to use VisInterface is COWPump.
Go check it out. (It uses the VisInterface classes exactly as they are here. |