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