I am using DirectFB 1.4.3 compiled with multiple application core.

I have many processes, each can have one or more off-screen surfaces and a compositor, which must have access to these surfaces and does the composition to the primary surface. There is also a dedicated IPC mechanism to pass ints/pointers.

I tried creating surfaces with DSCAPS_SHARED as is explained in this post:
http://mail.directfb.org/pipermail/directfb-dev/2009-November/005356.html
but IDirectFBSurface pointer returned is not created in shared memory. Looking into the sources, it is allocated by DIRECT_ALLOCATE_INTERFACE. However the structure contains a pointer to CoreSurface allocated by dfb_core_create_surface() in shared memory pool.
Corresponding part from log:
(-) [  NO NAME         2.084] ( 3302) Fusion/Object:      == Surface Pool ==
(-) [ NO NAME 2.085] ( 3302) Fusion/Object: -> added 0x20018400 with ref [0x8]
(-) [  NO NAME         2.100] ( 3302) Core/Surface:         -> 1920x1080
(-) [  NO NAME         2.102] ( 3302) Core/Surface:         -> RGB16
(-) [Main Thread       2.024] ( 3304) Core/SurfBuffer:      -> LAYER 0 READ
(-) [ NO NAME 2.107] ( 3302) Core/Surface: -> caps 0x00100000

I suspect addresses starting from 0x20000000 are in shared memory.

So the question is: How to create a surface in another process referencing given CoreSurface? Or is there any other way to have surfaces accessed by multiple processes?

I also looked at another approach, to use CreateWindow and in other process window::GetSurface. I am not sure it will work when actually I have my own window compositing. It seems a bit overcomplicated.

Thanks,
Krzysztof Sachanowicz

_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to