CVSROOT:        /cvs/directfb
Module name:    DirectFB
Changes by:     dok     20040429 21:08:45

Modified files:
        .              : BUGS Makefile.am TODO autogen.sh configure.in 
                         directfb-config.in directfb.pc.in 
        gfxdrivers/i810: Makefile.am i810.c i810_overlay.c 
        gfxdrivers/matrox: Makefile.am matrox.c matrox_crtc2.c 
                           matrox_maven.c matrox_screen_crtc2.c 
                           matrox_spic.c 
        gfxdrivers/nsc : Makefile.am nsc_galfns.c 
        gfxdrivers/radeon: Makefile.am radeon.c 
        gfxdrivers/sis315: Makefile.am sis315.c 
        include        : dfb_types.h directfb.h 
        inputdrivers/keyboard: Makefile.am keyboard.c 
        interfaces/IDirectFBImageProvider: idirectfbimageprovider_png.c 
        interfaces/IDirectFBVideoProvider: idirectfbvideoprovider_v4l.c 
        lib            : Makefile.am 
        lib/direct     : Makefile.am clock.c clock.h debug.h interface.c 
                         interface.h interface_implementation.h memcpy.c 
                         messages.c messages.h thread.c thread.h types.h 
                         util.c util.h 
        lib/fusion     : fusion.c lock.c lock.h property.c reactor.c 
                         ref.c 
        lib/fusion/shmalloc: shmalloc.c 
        src            : Makefile.am directfb.c idirectfb.c 
        src/core       : Makefile.am core.c fonts.c gfxcard.h layers.c 
                         layers.h state.c surfaces.c windows.c 
                         windowstack.c 
        src/display    : idirectfbpalette.c idirectfbsurface_layer.c 
        src/input      : idirectfbinputbuffer.c idirectfbinputbuffer.h 
        src/media      : idirectfbdatabuffer_file.c 
                         idirectfbdatabuffer_streamed.c 
                         idirectfbimageprovider.c 
        src/misc       : conf.c conf.h util.c 
        tools          : .cvsignore Makefile.am fusion_bench.c 
Added files:
        lib/direct     : hash.c hash.h 
        lib/voodoo     : .cvsignore Makefile.am build.h build.h.in 
                         client.c client.h conf.c conf.h interface.c 
                         interface.h internal.h manager.c manager.h 
                         message.h server.c server.h types.h 
        proxy          : .cvsignore Makefile.am 
        proxy/dispatcher: .cvsignore Makefile.am idirectfb_dispatcher.c 
                          idirectfb_dispatcher.h 
                          idirectfbdatabuffer_dispatcher.c 
                          idirectfbdatabuffer_dispatcher.h 
                          idirectfbeventbuffer_dispatcher.c 
                          idirectfbeventbuffer_dispatcher.h 
                          idirectfbfont_dispatcher.c 
                          idirectfbfont_dispatcher.h 
                          idirectfbfoo_dispatcher.c 
                          idirectfbfoo_dispatcher.h 
                          idirectfbimageprovider_dispatcher.c 
                          idirectfbimageprovider_dispatcher.h 
                          idirectfbpalette_dispatcher.c 
                          idirectfbpalette_dispatcher.h 
                          idirectfbscreen_dispatcher.c 
                          idirectfbscreen_dispatcher.h 
                          idirectfbsurface_dispatcher.c 
                          idirectfbsurface_dispatcher.h 
        proxy/requestor: .cvsignore Makefile.am idirectfb_requestor.c 
                         idirectfbdatabuffer_requestor.c 
                         idirectfbeventbuffer_requestor.c 
                         idirectfbfont_requestor.c 
                         idirectfbfont_requestor.h 
                         idirectfbfoo_requestor.h 
                         idirectfbimageprovider_requestor.c 
                         idirectfbpalette_requestor.c 
                         idirectfbpalette_requestor.h 
                         idirectfbscreen_requestor.c 
                         idirectfbsurface_requestor.c 
                         idirectfbsurface_requestor.h 
        systems        : .cvsignore Makefile.am 
        systems/fbdev  : .cvsignore Makefile.am fbdev.c fbdev.h vt.c 
                         vt.h 
        systems/sdl    : .cvsignore Makefile.am primary.c primary.h 
                         sdl.c sdl.h sdlinput.c 
        tools          : dfbproxy.c 
Removed files:
        src/core/fbdev : .cvsignore Makefile.am fbdev.c fbdev.h vt.c 
                         vt.h 
        src/core/sdl   : .cvsignore Makefile.am primary.c primary.h 
                         sdl.c sdl.h sdlinput.c 

Log message:
VOODOO

Added network transparency to DirectFB ;)

The concept is quite simple and working great. Each interface has two
new implementations: "Requestor" on client side and "Dispatcher" on
server side. Between them is a very small libvoodoo which manages network
connections and provides fast and powerful message encoding and decoding.

Each Dispatcher instance gets an ID which is also managed by libvoodoo.
The Requestor sends a request message for each method call, specifying the
remote instance ID and the method that is to be called. Parameters are appended
to that message before it gets sent to the server. On the server side the
Dispatcher interface is looked up in a hash table using the instance ID.
After fetching the parameters from the message without copying any data
except for some rare cases, the Dispatcher calls the "real" implementation.

Some requests have a corresponding response and some don't, e.g. all drawing
related methods return immediately after sending out the request. Methods
that require a response block until the response is received. Each response
contains at least the result (DFBResult). Further response data is appended
to the response message and returned to the application after being processed
by the Requestor.

Not every Dispatcher is server side and not every Requestor is client side.
IDirectFBEventBuffer and IDirectFBDataBuffer have a client side Dispatcher
and a server side Requestor. The server has to send events to the client side
by making a PostEvent request (without response). It also has to fetch data
via requests to the client side data buffer (with response), e.g. while
it is dispatching a RenderTo request. The client will send its compressed
data (PNG for example) over network to the server ;)

Another advantage is that existing applications can be used without changes.

The setup is quite simple: There's a new program called "dfbproxy" which
just waits for incoming connections (currently port 2323). It doesn't even
call DirectFBCreate() before clients request that.

Running applications via the proxy is done by passing "--dfb:remote=<host>".

Notes about performance: If DirectFB is built with debug mode disabled,
df_dok produces nearly the same results over ethernet. Running both the
client and the server on the same machine is slightly slower right now.

Notes about the implementation status: A lot of Requestor and Dispatcher
methods are not implemented yet, but many demos are running already.
IDirectFBDisplayLayer, IDirectFBWindow and IDirectFBInputDevice are missing
completely so far. IDirectFBFont has to be changed to use data buffers, too.
Currently the filename is transmitted over network and the font file is
loaded from the file system of the server.

OTHER CHANGES

Print a warning message in dfb_screen_rectangle()
when dfb_system_current_mode() returns NULL, e.g. during initialization.

Moved fbdev and sdl modules from src/core/ to systems/.

Added a magic to public interface structs,
i.e. use D_MAGIC_SET/ASSERT/CLEAR to detect life cycle problems.

Added "const" to some parameters in the public API.

Added a minimalistic hash table implementation for usage with IDs as keys.

Added direct_clock_set_start() that is called by Fusion's initialization
to synchronize time stamps of debug messages.

Changed D_MAGIC to enable spells with less than eight characters;
this macro generates a magic based on the string (spell) passed to it.

Added DirectResult which is the DFBResult outside of DirectFB.

Added message macro D_UNIMPLEMENTED which prints a warning once.

Added a name argument to direct_thread_create(),
printed during creation and termination of threads.

Moved fusion_pthread_recursive_mutex_init() to libdirect,
being called direct_util_recursive_pthread_mutex_init().



-- 
Info:  To unsubscribe send a mail to [EMAIL PROTECTED] with 
"unsubscribe directfb-cvs" as subject.

Reply via email to