Multiple windows hack?

I’ve succeded in making a working SDL ActiveX, I use the same code
without the ActiveX shell for a command line linux player and soon for a
netscape plugin :slight_smile:

The problem I have is that I’d like to be able to run multiple instances
of the plugin in the same web page or in different windows but explorer
always use the same OCX and not multiple copies of it and so the
dataspace is always the same and I cannot run multiple SDL windows.

I’ve tried to make the plugin a different process that use the explorer
window (so that I can have multiple windows with multiple copies of
SDL.dll) but this doesn’t make happy the memory protection of NT kernel
:slight_smile:

There is an hack I can use to have multiple windows? Something like to
have multiple copies of a DLL and to dinamically swaps function pointers
to the SDL API functions to refer to the functions with the correct
display/event global variables.

Obviously every SDL context should be run on a different (ad unique)
thread.

Actually I can think only about building a mini SDL with the functions I
need and a slightly modified API with multiwin support :slight_smile:

Bye,
Gabry

Gabriele Greco wrote:

There is an hack I can use to have multiple windows?

I’ve been poking around in the source, and it looks like the original
author(s) (Sam?) of the video section have thought about the basic
issue, becuase the display is wrapped in a variable called “this” which
is (currently the only) instance of a display structure/object. So,
support for multiscreen/multiwindow seems like it would involve grafting
a modified API for the window/screen open code, and then of course
writing the platform specific bits for your favorite platforms, but it
does not look terrible. And I for one would be very grateful! :slight_smile: I’m
probably not able to devote the time to delving in any deeper. There’s
another email about multiscreen from last month, I believe. If you
don’t see why I keep writing on and on about multiscreen when all you
asked about was multiwindow, it’s because I personally equate
multiscreen with multiwindows with respect to SDL. If you want OpenGL
acceleration on multiple windows (which is what I use SDL with, and I
think a lot of others do as well), especially with the possibility those
windows are on open on another display, you want to make sure you can
configure your graphics mode to one that you and your card both like, at
least if your system allows it.

There is an hack I can use to have multiple windows?

Obviously every SDL context should be run on a different (and unique)
thread.

I’m not positive, but at least with OpenGL you’d want just a single
rendering thread because a video card is a state machine, and to save
all those state variables and switch to another context would be
expensive, so the best thing would probably be to render your contexts
in a serial manner.

Actually I can think only about building a mini SDL with the functions
I need and a slightly modified API with multiwin support :slight_smile:

It’s been suggested before (by me for one:), but when I actually looked
at the code, I thought that it wouldn’t be that difficult to do the
Right Way. Hence my decision not to “hack and destroy”.

The problem I have is that I’d like to be able to run multiple
instances of the plugin in the same web page or in different windows
but explorer always use the same OCX and not multiple copies of it and
so the dataspace is always the same and I cannot run multiple SDL
windows. Is there a hack I can use to have multiple windows? Something
like to have multiple copies of a DLL and to dinamically swaps function
pointers to the SDL API functions to refer to the functions with the
correct display/event global variables.

I have a very OpenGL-centric understanding, but I think for the reasons
I wrote above (OpenGL being a state machine) you’d be better off to do
it all from a single copy of the library loaded. For non-OpenGL, I don’t
know if SDL gets a lock on low-level system resources. I wonder what
happens with two graphics cards? Could the cards each run their own
instance of the library simultaneously? Hmm… maybe all you need is a
new card for each window you want to open! :slight_smile:

Anyhow, good luck!
Andrew