Text archives Help
- From: Abe Stephens <abe@sci.utah.edu>
- To: "'manta@sci.utah.edu'" <manta@sci.utah.edu>
- Subject: Re: [MANTA] Re: Asynchronous i/o in manta and conventional gui's
- Date: Mon, 13 Jun 2005 22:44:10 -0700
Steven Parker wrote:
On Jun 13, 2005, at 8:54 PM, Abe Stephens wrote:
Steven Parker wrote:
On Jun 13, 2005, at 4:36 PM, Abe Stephens wrote:
It seems like what we really want is for the readiness of a new
image to be treated as a message event type inside of the gui
framework, just as a keystroke would be. I doubt this functionality
is available inside glut, does anyone know if it is available in
other toolkits?
The question is whether you want the GUI framework to even touch the
image. I claim that the answer is "no", in most situations.
Manta reacts to instructions from the user and produces images for
the user. What happens after it produces those images is up to
whatever invoked it.
I think that this is useful in some circumstances, but think of the
OpenGL model - you feed it data and the image shows up on the screen.
You are never given the image back.
I think most opengl programs render some data, and then call swap
buffers (on their own context), which synchronizes the client and gpu
before continuing with the program. The rendering model we are talking
about is different, its asynchronous.
The solution here is that manta needs its own "rendering context" to
interact with the output device. This context would be passed to manta
by the driving application.
This is essentially what happens in the current code--I just didn't
realize it until now--although there aren't any other contexts
associated with other threads in the application--and the only other
part of the "application" is the X11 input loop.
The context is a low level entity and allows the ImageDisplay to talk
directly to the graphics driver or network compression engine, no gui is
involved.
(On the topic of vizserver.)
The right way to integrate this with VizServer is to implement a
custom component that compresses the images, possibly in parallel, and
sends it over the vizserver connection. This could operate without
any graphics hardware
I agree that that is probably the best way to integrate with vizserver.
Although compressing the images and sending them to some remote client I
think is the only type of functionality that we need. The other
components of vizserver (host window manager, which doesn't support copy
& paste, and x11 stuff) are probably unnecessary.
Besides I'd rather have manta produce a stream of images which we can
view on a mac client, or a windows client or any other computer we can
write a client for. We could do things like change the lossy compression
ratio used depending on system and network performance etc..
(Back to the continuous refresh discussion.)
One of the design goals of Manta is to allow a variety of underlying
image formats, which would complicate moving images back through the
client.
Eventually some graphics driver is going to reformat all of your data
anyways. I don't think its especially important if the code that does
this is in a Manta ImageDisplay implementation or if it was written down
the hall by the driver team. We're also talking about embedding here-
just because manta supported a 384 bit RGB pixel doesn't mean that the
driving application will use it.
I'm not claiming it is trivial but this is a visibility query which a
scene database could answer.
Honestly, I think that a visibility query is probably beyond the point
of diminishing returns. They are expensive, and still wouldn't be
conclusive - what if the background was dynamic and you wanted to
watch it?
Let's say we have a portal acceleration structure for our model of a
large ship. If I am on the flight deck and something in the engine room
turns (maybe 50GB of triangles between me and the movement), why should
I have to refresh my image? There is a lot of overhead associated with
rendering a new frame and sending it to the client that we can avoid if
we can quickly decide the frame doesn't have to be rendered. This is
especially true if the animation is never visible.
Although if I can view the model at 30fps, including network--that
visibility check had better be very fast.
Keeping the processors "hot" is the lowest latency mechanism. The
IdleMode allows you to (among other things) release resources during
periods of inactivity.
I think that that is a reasonable assumption, however, I would
suggest that keeping the processors hot and the rest of the computer
hot, and the network between the system and the viewing workstation
hot, is unnecessary.
There may be some modes where you want to shut down the processors,
and some where you do not.
I'm not as concerned about the processors, I just don't want to send
unnecessary frames across the network, ever.
"In embedded mode, Manta will process a stream of input and produce
an output stream asynchronously. Once the input is consumed, Manta
will enter a state where it stops producing frames on its output
stream and will wait until there is more work on its input stream."
This could be implemented with idle mode.
Yes it can. However, I don't know that it should always be on for
embedded mode. The embedded mode is just responsible for selecting a
to-be-implemented "quiet the CPUs" idlemode.
I'm not sold on the idea that there should be any indication that manta
would produce frames forever after you start it.
Perhaps it would be better to say that since the output is completely
asynchronous, frames might be generated by some global event after the
input stream is consumed--but there is always some event or state change
associated with a new frame, somewhere in the system.
Abe
Archive powered by MHonArc 2.6.16.